代码之家  ›  专栏  ›  技术社区  ›  Arvind

复选框在多选列表视图中不可见

  •  0
  • Arvind  · 技术社区  · 6 年前

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

    我在这里粘贴相关的代码,如果需要,我可以共享更多的代码,stackoverflow告诉我,如果我只是粘贴整个代码,代码就太多了。

    PS.安卓初学者。

    在我的 公共类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;
        }
    

    活动\main.xml

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

    ROWIITIEM.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"/>
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Vucko    6 年前

    您实际上正在为这一行中的每一项显示所需的视图:

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

    你的 row_item 布局只有2个 TextViews 所以它会膨胀每个项目的布局,因为其中没有任何复选框,这就是你看不到它们的原因。只需更改该布局,在任何需要的地方包含一个复选框,它就会出现。

    不管是这样还是改变你正在膨胀的布局,我认为应该有一些预先制作的安卓系统可以使用。

    推荐文章