Я пытаюсь создать список, который, когда пользователь долго нажимает на элемент, показывает панель контекстного действия (CAB) и позволяет пользователю выбирать несколько элементов. Единственная проблема, с которой я столкнулся, заключается в том, что первый длинный клик по элементу игнорируется, и только со второго длинного щелчка отображается CAB.Первый длинный клик игнорируется в listview
Мой код:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_notification_list);
mLv = (ListView) findViewById(R.id.listview_notifications);
mCtx = this;
...
mLv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
final CustomNotification notification = (CustomNotification) mAdapter.getItem(position);
new AlertDialog.Builder(NotificationListActivity.this)
.setTitle(notification.getScope())
.setMessage(notification.getMessage())
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if(notification.getReadDate().isEmpty()){
//Mark local notification as read
ContentResolver cr = getContentResolver();
DateTime dateTime = new DateTime(DateTimeZone.getDefault());
ContentValues values = new ContentValues();
values.put(CustomNotification.COL_READ_DATE, dateTime.toString());
String selection = CustomNotification.COL_NOTIFICATION_ID + "=" + notification.getNotificationID();
cr.update(CustomNotification.getContentUri(), values, selection, null);
Intent i = new Intent(Constants.BROADCAST_GCM_SINGLE_NOTIFICATION_READ);
sendBroadcast(i);
}
dialog.dismiss();
}
})
.create()
.show();
}
});
mLv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
mLv.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE_MODAL);
mLv.setMultiChoiceModeListener(new modeCallBack());
return true;
}
});
mLv.setEmptyView(findViewById(R.id.notification_listview_empty));
}
Мои MultiChoiceListener реализация:
private class modeCallBack implements ListView.MultiChoiceModeListener{
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
if(checked){
mAdapter.addSelectedItem((CustomNotification) notificationArray.get(position));
}else{
mAdapter.removeSelectedItem((CustomNotification) notificationArray.get(position));
}
mAdapter.notifyDataSetChanged();
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mAdapter.setActionMode(mode);
mode.getMenuInflater().inflate(R.menu.notifications_selected_actions, menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return true;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
mAdapter.setActionMode(null);
mAdapter.removeAllSelectedItems();
}
}
Это сделало, спасибо. – Anubis