对于RecyclerView中的多选,我使用了以下Project
现在我面临两个问题:
在行上单击我打开不同的片段和点击地图图标我打开地图片段。
片段代码:
@Override
public void onClick(View v) {
if (v.getId() == R.id.root_row_item) {
int idx = mRecyclerView.getChildPosition(v);
if (actionMode != null) {
myToggleSelection(idx);
return;
} else {
int pos = idx;
Intent intent = new Intent(getActivity(), OtherActivity.class);
intent.putExtra(ContactDetailFragment.KEY_CONTACT_DP, getUserDpFromDB(mCallLogBeanList.get(pos).getNumber()));
intent.putExtra(ContactDetailFragment.KEY_CONTACT_NAME, mCallLogBeanList.get(pos).getName());
intent.putExtra(ContactDetailFragment.KEY_CONTACT_NUMBER, mCallLogBeanList.get(pos).getNumber());
startActivity(intent);
}
}
}
private void myToggleSelection(int idx) {
mContactsAdapter.toggleSelection(idx);
String title = getString(R.string.selected_count, mContactsAdapter.getSelectedItemCount());
actionMode.setTitle(title);
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.menu_delete, menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.menu_delete:
List<Integer> selectedItemPositions = mContactsAdapter.getSelectedItems();
int currPos;
for (int i = selectedItemPositions.size() - 1; i >= 0; i--) {
currPos = selectedItemPositions.get(i);
// RecyclerViewDemoApp.removeItemFromList(currPos);
deleteCallLogsFromDB(currPos);
}
mode.finish();
return true;
default:
return false;
}
}
@Override
public void onDestroyActionMode(ActionMode actionMode) {
this.actionMode = null;
mContactsAdapter.clearSelections();
}
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
gestureDetector.onTouchEvent(e);
return false;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
public interface OnFragmentInteractionListener {
// TODO: Update argument type and name
public void onFragmentInteraction(Uri uri);
}
//==============================================================================================
private class RecyclerViewGestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
try {
View view = mRecyclerView.findChildViewUnder(e.getX(), e.getY());
onClick(view);
} catch (NullPointerException ne) {
Log.e("NullPointerException", ne.getMessage());
}
return super.onSingleTapConfirmed(e);
}
public void onLongPress(MotionEvent e) {
View view = mRecyclerView.findChildViewUnder(e.getX(), e.getY());
if (actionMode != null) {
return;
}
AppCompatActivity aca = (AppCompatActivity) getActivity();
actionMode = aca.startSupportActionMode(TabCallLogFragment.this);
int idx = mRecyclerView.getChildAdapterPosition(view);
myToggleSelection(idx);
super.onLongPress(e);
}
}
适配器部分:
@Override
public void onBindViewHolder(ListItemViewHolder viewHolder, int position) {
holder.Location.setTag(position);
holder.Location.setOnClickListener(this);
}