使用Dynamic ArrayAdapter选择多个ListView项

时间:2015-05-26 13:46:07

标签: android android-listview

我正在开发Android聊天应用程序。在我的聊天活动中,我使用了分页概念,意味着将向用户显示四条消息,就像Whats App一样,如果您有超过一百条消息,它会显示Load More的选项。出于测试目的,我使用了四个消息的限制。这是快照。

enter image description here

如果我点击Load More Chat它会显示前四条消息。这是其他快照。 Load More Chat是listView的标题视图集。

enter image description here

现在假设从第一个屏幕截图中我选择了最后两个列表项,它们位于listView的第三和第四位置。像这样

enter image description here

现在我点击Load More Chat选项,然后它会自动选择listItems,它们现在位于第三和第四位置,因为ArrayAdapter已经更新。这是图片。意味着它没有保留我之前选择的项目,因此我的应用程序中存在错误。

enter image description here

现在我很困惑如何解决问题。我试过了,但是徒劳无功。

这是我的listview代码。

listView.setMultiChoiceModeListener(this);

MultichoiceListener的Overriden方法如下。

@Override
public boolean onActionItemClicked(android.view.ActionMode arg0,
        MenuItem arg1) {

    return false;
}

@Override
public boolean onCreateActionMode(android.view.ActionMode mode, Menu menu) {
    mode.getMenuInflater().inflate(R.menu.chat_activity_menu, menu);
    return true;
}

@Override
public void onDestroyActionMode(android.view.ActionMode arg0) {

}

@Override
public boolean onPrepareActionMode(android.view.ActionMode arg0, Menu arg1) {
    return false;
}

@Override
public void onItemCheckedStateChanged(android.view.ActionMode mode,
        int position, long id, boolean selected) {
    final int checkedCount = listView.getCheckedItemCount();
    mode.setTitle(checkedCount + " Selected");
}
ArrayAdapter中的

getView方法如下。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ListView lv =  (ListView) parent;
    int headerCount = lv.getHeaderViewsCount();
    Log.d("d", "header count "+headerCount);
    View row = convertView;
    if (row == null) {
        LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = inflater.inflate(R.layout.activity_chat_singlemessage, parent, false);
    }
    containerLayout = (LinearLayout) row.findViewById(R.id.containerLayout);
    messageContainer = (LinearLayout)  row.findViewById(R.id.messageContainer);
    ChatMessage chatMessageObj = getItem(position);
    chatText = (TextView) row.findViewById(R.id.singleMessage);
    timeOfChat = (TextView) row.findViewById(R.id.tvTimeOfMessage);
    chatText.setText(chatMessageObj.message);
    timeOfChat.setText(chatMessageObj.timeOfChat);
    row.setId((int) chatMessageObj.messageID);
    messageContainer.setBackgroundResource(chatMessageObj.left ? R.drawable.bubble_a : R.drawable.bubble_b);
    containerLayout.setGravity(chatMessageObj.left ? Gravity.LEFT : Gravity.RIGHT);
    return row;
}

任何帮助将不胜感激。 Plz的帮助。 谢谢!

0 个答案:

没有答案