android - 如何从操作模式和可扩展 ListView 中获取选定的项目?

标签 android

我有一个 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/

相关文章:

android - Gradle 无法解析 com.google.android.gms :play-services-auth:11. 6.0

android - 如何将布局参数设置为对话框中的编辑文本?

java - JSON 请求调整 URL 参数

android - 带有 float 操作按钮的共享元素过渡

java - 短信权限无效。无论我把许可标签放在哪里

java - 如何在 ListView 中实现删除按钮并从数据库中删除?

android - 关于多个dex文件定义Lcom/google/gson/JsonSerializer

android - 带有参数化 IN (...) 子句的 Sqlite UPDATE

java - 即使应用程序未运行,如何每 10 分钟在后台获取位置信息?

安卓 : Check 3G or Wifi network is ON or Available or not on android Device