⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chatview.java

📁 Android平台上即时通讯聊天工具源代码。 支持手机聊天。
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
                return false;            }            return mCursor.updateShort(columnIndex, value);        }        public boolean updateInt(int columnIndex, int value) {            if (columnIndex == mDeltaColumn) {                return false;            }            return mCursor.updateInt(columnIndex, value);        }        public boolean updateLong(int columnIndex, long value) {            if (columnIndex == mDeltaColumn) {                return false;            }            return mCursor.updateLong(columnIndex, value);        }        public boolean updateFloat(int columnIndex, float value) {            if (columnIndex == mDeltaColumn) {                return false;            }            return mCursor.updateFloat(columnIndex, value);        }        public boolean updateDouble(int columnIndex, double value) {            if (columnIndex == mDeltaColumn) {                return false;            }            return mCursor.updateDouble(columnIndex, value);        }        public boolean updateToNull(int columnIndex) {            if (columnIndex == mDeltaColumn) {                return false;            }            return mCursor.updateToNull(columnIndex);        }        public boolean commitUpdates() {            return mCursor.commitUpdates();        }        public boolean commitUpdates(Map<? extends Long,                ? extends Map<String,Object>> values) {            return mCursor.commitUpdates(values);        }        public void abortUpdates() {            mCursor.abortUpdates();        }        public void deactivate() {            mCursor.deactivate();        }        public boolean requery() {            return mCursor.requery();        }        public void close() {            mCursor.close();        }        public boolean isClosed() {            return mCursor.isClosed();        }        public void registerContentObserver(ContentObserver observer) {            mCursor.registerContentObserver(observer);        }        public void unregisterContentObserver(ContentObserver observer) {            mCursor.unregisterContentObserver(observer);        }        public void registerDataSetObserver(DataSetObserver observer) {            mCursor.registerDataSetObserver(observer);        }        public void unregisterDataSetObserver(DataSetObserver observer) {            mCursor.unregisterDataSetObserver(observer);        }        public void setNotificationUri(ContentResolver cr, Uri uri) {            mCursor.setNotificationUri(cr, uri);        }        public boolean getWantsAllOnMoveCalls() {            return mCursor.getWantsAllOnMoveCalls();        }        public Bundle getExtras() {            return mCursor.getExtras();        }        public Bundle respond(Bundle extras) {            return mCursor.respond(extras);        }        public String[] getColumnNames() {            return mColumnNames;        }        private void checkPosition() {            int pos = mCursor.getPosition();            int count = mCursor.getCount();            if (-1 == pos || count == pos) {                throw new CursorIndexOutOfBoundsException(pos, count);            }        }        public byte[] getBlob(int column) {            checkPosition();            if (column == mDeltaColumn) {                return null;            }            return mCursor.getBlob(column);        }        public String getString(int column) {            checkPosition();            if (column == mDeltaColumn) {                long value = getDeltaValue();                return Long.toString(value);            }            return mCursor.getString(column);        }        public void copyStringToBuffer(int columnIndex, CharArrayBuffer buffer) {            checkPosition();            if (columnIndex == mDeltaColumn) {                long value = getDeltaValue();                String strValue = Long.toString(value);                int len = strValue.length();                char[] data = buffer.data;                if (data == null || data.length < len) {                    buffer.data = strValue.toCharArray();                } else {                    strValue.getChars(0, len, data, 0);                }                buffer.sizeCopied = strValue.length();            } else {                mCursor.copyStringToBuffer(columnIndex, buffer);            }        }        public short getShort(int column) {            checkPosition();            if (column == mDeltaColumn) {                return (short)getDeltaValue();            }            return mCursor.getShort(column);        }        public int getInt(int column) {            checkPosition();            if (column == mDeltaColumn) {                return (int)getDeltaValue();            }            return mCursor.getInt(column);        }        public long getLong(int column) {        //if (DBG) log("DeltaCursor.getLong: column=" + column + ", mDeltaColumn=" + mDeltaColumn);            checkPosition();            if (column == mDeltaColumn) {                return getDeltaValue();            }            return mCursor.getLong(column);        }        public float getFloat(int column) {            checkPosition();            if (column == mDeltaColumn) {                return getDeltaValue();            }            return mCursor.getFloat(column);        }        public double getDouble(int column) {            checkPosition();            if (column == mDeltaColumn) {                return getDeltaValue();            }            return mCursor.getDouble(column);        }        public boolean isNull(int column) {            checkPosition();            if (column == mDeltaColumn) {                return false;            }            return mCursor.isNull(column);        }        private long getDeltaValue() {            int pos = mCursor.getPosition();            //Log.i(LOG_TAG, "getDeltaValue: mPos=" + mPos);            long t2, t1;            if (pos == getCount()-1) {                t1 = mCursor.getLong(mDateColumn);                t2 = System.currentTimeMillis();            } else {                mCursor.moveToPosition(pos + 1);                t2 = mCursor.getLong(mDateColumn);                mCursor.moveToPosition(pos);                t1 = mCursor.getLong(mDateColumn);            }            return t2 - t1;        }    }    private class MessageAdapter extends CursorAdapter implements AbsListView.OnScrollListener {        private int mScrollState;        private boolean mNeedRequeryCursor;        private int mContactColumn;        private int mBodyColumn;        private int mDateColumn;        private int mTypeColumn;        private int mErrCodeColumn;        private int mDeltaColumn;        private ChatBackgroundMaker mBgMaker;        private LayoutInflater mInflater;        public MessageAdapter(Activity context, Cursor c) {            super(context, c, false);            mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);            mBgMaker = new ChatBackgroundMaker(context);            if (c != null) {                resolveColumnIndex(c);            }        }        private void resolveColumnIndex(Cursor c) {            mContactColumn = c.getColumnIndexOrThrow(Im.BaseMessageColumns.CONTACT);            mBodyColumn = c.getColumnIndexOrThrow(Im.BaseMessageColumns.BODY);            mDateColumn = c.getColumnIndexOrThrow(Im.BaseMessageColumns.DATE);            mTypeColumn = c.getColumnIndexOrThrow(Im.BaseMessageColumns.TYPE);            mErrCodeColumn = c.getColumnIndexOrThrow(Im.BaseMessageColumns.ERROR_CODE);            mDeltaColumn = c.getColumnIndexOrThrow(DeltaCursor.DELTA_COLUMN_NAME);        }        @Override        public void changeCursor(Cursor cursor) {            super.changeCursor(cursor);            if (cursor != null) {                resolveColumnIndex(cursor);            }        }        @Override        public View newView(Context context, Cursor cursor, ViewGroup parent) {            return mInflater.inflate(R.layout.new_message_item, parent, false);        }        @Override        public void bindView(View view, Context context, Cursor cursor) {            MessageView chatMsgView = (MessageView) view;            int type = cursor.getInt(mTypeColumn);            String contact = isGroupChat() ? cursor.getString(mContactColumn) : mNickName;            String body = cursor.getString(mBodyColumn);            long delta = cursor.getLong(mDeltaColumn);            boolean showTimeStamp = (delta > SHOW_TIME_STAMP_INTERVAL);            Date date = showTimeStamp ? new Date(cursor.getLong(mDateColumn)) : null;            switch (type) {                case Im.MessageType.INCOMING:                    chatMsgView.bindIncomingMessage(contact, body, date, mMarkup, isScrolling());                    break;                case Im.MessageType.OUTGOING:                case Im.MessageType.POSTPONED:                    int errCode = cursor.getInt(mErrCodeColumn);                    if (errCode != 0) {                        chatMsgView.bindErrorMessage(errCode);                    } else {                        chatMsgView.bindOutgoingMessage(body, date, mMarkup, isScrolling());                    }                    break;                default:                    chatMsgView.bindPresenceMessage(contact, type, isGroupChat(), isScrolling());            }            if (!isScrolling()) {                mBgMaker.setBackground(chatMsgView, contact, type);            }            // if showTimeStamp is false for the latest message, then set a timer to query the            // cursor again in a minute, so we can update the last message timestamp if no new            // message is received            if (cursor.getPosition() == cursor.getCount()-1) {                if (Log.isLoggable(ImApp.LOG_TAG, Log.DEBUG)){                    log("delta = " + delta + ", showTs=" + showTimeStamp);                }                if (!showTimeStamp) {                    scheduleRequery(SHOW_TIME_STAMP_INTERVAL);                } else {                    cancelRequery();                }            }        }        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,                int totalItemCount) {            // do nothing        }        public void onScrollStateChanged(AbsListView view, int scrollState) {            int oldState = mScrollState;            mScrollState = scrollState;            if (oldState == OnScrollListener.SCROLL_STATE_FLING) {                if (mNeedRequeryCursor) {                    requeryCursor();                } else {                    notifyDataSetChanged();                }            }        }        boolean isScrolling() {            return mScrollState == OnScrollListener.SCROLL_STATE_FLING;        }        void setNeedRequeryCursor(boolean requeryCursor) {            mNeedRequeryCursor = requeryCursor;        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -