【问题标题】:Checkbox not visible on multiple choice ListView复选框在多选 ListView 上不可见
【发布时间】:2019-02-02 18:22:47
【问题描述】:

我希望我的列表视图显示复选框。目前,它只是作为一个普通的 listView,因为它只正确呈现项目,唯一的问题是缺少复选框。我正在使用自定义适配器。

我在这里粘贴相关代码,如果需要我可以分享更多,StackOverflow 告诉我如果我只是粘贴整个东西,那么代码太多了。

附言。安卓初学者。

在我的公共类 MainActivity 扩展 ListActivity

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setListAdapter(new GroceryAdapter(new ArrayList<>(Arrays.asList(arr)), getApplicationContext()));
        ListView list = getListView();
        list.setItemChecked(2, true);
    }

在我的 类 GroceryAdapter 中扩展了 ArrayAdapter

private static class ViewHolder {
        TextView txtName;
        TextView txtCost;
    }

public GroceryAdapter(ArrayList<GroceryItem> data, Context x) {
        super(x, android.R.layout.simple_list_item_multiple_choice, data);
        this.data = data;
        this.x = x;
    }

public View getView(int pos, View convertView, ViewGroup parent) {
        GroceryItem item = getItem(pos);
        ViewHolder viewHolder;
        final View result;

        if(convertView == null) {
            viewHolder = new ViewHolder();
            LayoutInflater inflater = LayoutInflater.from(getContext());
            convertView = inflater.inflate(R.layout.row_item, parent, false);
            viewHolder.txtName = convertView.findViewById(R.id.name);
            viewHolder.txtCost = convertView.findViewById(R.id.cost);
            convertView.setTag(viewHolder);
        }
        else {
            viewHolder = (ViewHolder)convertView.getTag();
        }

        viewHolder.txtName.setText(item.name);
        viewHolder.txtCost.setText(String.format("Rs.%s", String.valueOf(item.cost)));
        result = convertView;
        return result;
    }

activity_main.xml

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@android:id/list"
    android:choiceMode="multipleChoice"
/>

row_item.xml

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/name"
    android:layout_alignParentTop="true"
    android:layout_alignParentStart="true"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/cost"
    android:layout_alignParentTop="true"
    android:layout_alignParentEnd="true"/>

【问题讨论】:

    标签: android android-listview android-arrayadapter


    【解决方案1】:

    您实际上是在为该行中的每个项目显示您想要显示的视图:

    convertView = inflater.inflate(R.layout.row_item, parent, false);
    

    您的row_item 布局只有 2 个TextViews,因此它会为每个项目扩展该布局,并且由于其中没有任何复选框,这就是您看不到它们的原因。只需更改该布局以在您想要的任何位置包含一个复选框,它就会在那里。

    无论是这个还是改变你正在膨胀的布局,我认为应该有一些预制的 Android 可以使用。

    【讨论】:

    • 谢谢!你能解释一下在我的 GroceryAdapter 中做 super(x, android.R.layout.simple_list_item_multiple_choice, data) 有什么意义吗?我认为 row_item 将是布局中 simple_list_item 的子项。
    • 关键是它使用了那个布局。然后你在你的方法中覆盖它。如果没有getView 方法,它也会显示复选框,但你的逻辑也必须改变。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    相关资源
    最近更新 更多