我有一个 ExpandableListView,我想在用户长按和项目时启用操作模式。我设法使 Action 模式起作用,但是当我试图知道选择了哪个项目时,问题就来了。这是我的 fragment 的代码,在 onItemLongClick
函数中我尝试选择用户长按的元素(我虽然 ExpandibleListView 会自己做),然后在 ActionMode.Callback
我尝试获取选定的元素,但我总是得到一个空值。哪里有问题?我应该怎么做才能让它发挥作用?
提前致谢!
public class OverviewFragment extends Fragment{
private ExpandableListView listViewTimeslips;
private ActionMode mActionMode;
private ActionMode.Callback mActionModeCallback = new ActionMode.Callback(){
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.action_edit:
//HERE I GET A NULL
Timeslip timeslip = (Timeslip)listViewTimeslips.getSelectedItem();
mode.finish(); // Action picked, so close the CAB
return true;
case R.id.action_remove:
mode.finish(); // Action picked, so close the CAB
return true;
default:
return false;
}
//MORE CODE
};
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
listViewTimeslips.setOnItemLongClickListener(new OnItemLongClickListener(){
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
if(mActionMode!=null){
return false;
}
if (ExpandableListView.getPackedPositionType(id) == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
int groupPosition = ExpandableListView.getPackedPositionGroup(id);
int childPosition = ExpandableListView.getPackedPositionChild(id);
((ExpandableListView)parent).setSelectedChild(groupPosition, childPosition, true);
}
mActionMode = ((ActionBarActivity)getActivity()).startSupportActionMode(mActionModeCallback);
view.setSelected(true);
}
});
最佳答案
好的,我终于成功了。我所做的是在 onItemLongClick
方法中添加这一行:
listViewTimeslips.setItemChecked(position, true);
然后,在 onActionItemClicked
上,在 ActionMode.Callback()
内:
int pos = listViewTimeslips.getRefreshableView().getCheckedItemPosition();
Timeslip timeslip = (Timeslip)listViewTimeslips.getItemAtPosition(pos);
关于android - 如何从操作模式和可扩展 ListView 中获取选定的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21185929/