3

对于基于 ICS 的应用程序,我创建了一个 ListFragment,它又使用 BaseAdapter 实现。我已启用 MultiChoiceModeListener() 以显示上下文操作栏。但这里的问题是,每当我检查 CheckBox 或长按标签(两者都在 BaseAdapter 中的视图集中)时,根本不会调用 MultiChoiceModeListener 实现。任何形式的帮助都非常感谢,因为我在尝试了很多选择后完全被卡住了!!!

public class ActivitiesFragment extends ListFragment {

public void onActivityCreated(Bundle savedInstanceState) {
    Log.d(TAG, "Entering onActivityCreated()");
    super.onActivityCreated(savedInstanceState);

    this.setAdapter();
    this.setHasOptionsMenu(true);
}

private void setAdapter() {

    HashMap<String, String> activities = DBAdapter
            .getInstance(this.context).getActivities();
    setListAdapter(new ActivitiesList(Util.sortByComparator(activities)));

    ListView listView = getListView();
    listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
    listView.setMultiChoiceModeListener(new MultiSelectionListener());

}

private class ActivitiesList extends BaseAdapter {
    // Other functions declared
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ActivityView view = null;
        String activityName = this.activityList.get(position);
        String colour = this.activities.get(activityName);

        if (convertView == null) {
            // ActivityView is a LinearLayout with CheckBox, Label and a Button
            view = new ActivityView(context, activityName, colour);

        } else {
            view = (ActivityView) convertView;
            view.setActivityName(activityName);
        }
        return view;
    }
}

private class MultiSelectionListener implements MultiChoiceModeListener {
    // implementation
}

}
4

4 回答 4

0

您需要使用ActionMode.Callback. 您应该通读这些文档,它实际上非常易于使用。

于 2012-05-15T01:24:21.133 回答
0

您应该检查列表中是否没有任何内容具有 onLongClickListener 。我和你有同样的问题,我意识到我的 ViewHolder 调用了长按,所以 MultiChoiceListener 从未被调用。

于 2015-03-02T16:11:04.683 回答
0

我有一个类似的问题,即使列出的项目ListView有一个CheckBox,检查它们也不会调用MultiChoiceModeListener. 通过一些研究和查看名为的示例(您可以从->CustomChoiceList导入 Android Studio ),我发现绑定到的 s必须实现 interface 。直接引用 CustomChoiceList 示例FileImport SampleViewListViewCheckable

当 ListView 设置了 choiceMode 时,它​​将允许用户“选择”一个或多个项目。该框架提供了默认的列表项布局,在单行文本旁边显示标准单选按钮或复选框:

android.R.layout.simple_list_item_single_choice 和 android.R.layout.simple_list_item_multiple_choice。

在某些情况下,您可能想要自定义此布局。这样做时,根视图必须实现 Checkable 接口。

我知道文档可能更清楚地说明了实现 Checkable 接口的必要性。它在最后一段中说

当用户选中复选框时,您可以通过使用 setItemChecked() 将相应的列表项设置为选中状态来调用上下文操作模式。

您不必担心,ActionMode.Callback因为它由MultipleChoiceModeListener

于 2015-04-14T15:04:02.710 回答
-3

您的 MultiChoiceModeListener 实现中可能存在错误。这对我来说可以。

于 2013-01-31T14:21:11.267 回答