android - 具有复选框行为的自定义 ListView ,例如在 gmail 应用程序上

标签 android listview checkbox

我在这里阅读了很多关于 ListView 和复选框的帖子。他们中的很多人使用 CheckedTextView 或扩展它。我想实现一个带有复选框行为的自定义 ListView ,就像在 Android 邮件应用程序(Gingerbread、ICS)上一样:只有复选框是可检查的,而不是整行。另外,在 ICS 上,操作栏指示已检查列表项的数量。

任何人都可以给我一些代码或指出正确的方向吗?谢谢!

最佳答案

查看 API Demos List 16 多选模式中的示例

public class List16 extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ListView lv = getListView();
    lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
    lv.setMultiChoiceModeListener(new ModeCallback());
    setListAdapter(new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_activated_1, 
            Cheeses.sCheeseStrings));
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    getActionBar().setSubtitle("Long press to start selection");
}

private class ModeCallback implements ListView.MultiChoiceModeListener {

    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.list_select_menu, menu);
        mode.setTitle("Select Items");
        return true;
    }

    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
        return true;
    }

    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        switch (item.getItemId()) {
        case R.id.share:
            Toast.makeText(List16.this, "Shared " + getListView().
            getCheckedItemCount() +
                    " items", Toast.LENGTH_SHORT).show();
            mode.finish();
            break;
        default:
            Toast.makeText(List16.this, "Clicked " + item.getTitle(),
                    Toast.LENGTH_SHORT).show();
            break;
        }
        return true;
    }

    public void onDestroyActionMode(ActionMode mode) {
    }

    public void onItemCheckedStateChanged(ActionMode mode,
            int position, long id, boolean checked) {
        final int checkedCount = getListView().getCheckedItemCount();
        switch (checkedCount) {
            case 0:
                mode.setSubtitle(null);
                break;
            case 1:
                mode.setSubtitle("One item selected");
                break;
            default:
                mode.setSubtitle("" + checkedCount + " items selected");
                break;
        }
    }

}
}

关于android - 具有复选框行为的自定义 ListView ,例如在 gmail 应用程序上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8224142/

相关文章:

android - 停止用户滚动以在 RecyclerView 上设置位置

android - 填充被添加到 CardView 的顶部,TextView 中的文本变得越长

c# - 如何在 UWP 中使用 ListView 捕获点击?

android - android中的 ListView 边框设计

c# - 对 ListView 中的条目进行排序

android - 检查后复选框错误不会消失

html - 单击后从复选框中删除悬停类

android - 在 Android 屏幕上显示加载叠加层

Android:为什么我的 EditText 保持其值(value),即使在方向改变时也是如此?

c# - WPF:获取一个 ListBoxItem 作为具有模板样式的 CheckBox 以与 IsSelected 同步