Java Android中复选框的列表视图由字符串而不是复选框可视化

Java Android中复选框的列表视图由字符串而不是复选框可视化,java,android,listview,checkbox,android-listview,Java,Android,Listview,Checkbox,Android Listview,我想创建ListView复选框,将List传递给它,当对象添加到ListListView时,它会自动更新。 我定义了ListView: <ListView android:id="@+id/productList" android:layout_width="match_parent" android:layout_height="wrap_content" >

我想创建
ListView
复选框,将
List
传递给它,当对象添加到List
ListView
时,它会自动更新。 我定义了
ListView

 <ListView
        android:id="@+id/productList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >       
    </ListView>
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_product_list,
            container, false);
    
    ListView listView = (ListView) rootView.findViewById(R.id.productList);
    ArrayList<CheckBox> list = new ArrayList<CheckBox>();
    CheckBox el = new CheckBox(rootView.getContext());
    el.setText("STH");
    list.add(el);
    ArrayAdapter<CheckBox> adapter = new ArrayAdapter<CheckBox>(rootView.getContext(),android.R.layout.simple_list_item_1, list);
    listView.setAdapter(adapter);       
    return rootView;
}
结果很糟糕:

我可能在
ListView
中得到了
Checkbox.toString()
,而不是复选框列表


如何获取复选框列表,我可以点击并选择这些复选框,这些复选框将位于一个容器中。

主要问题是您正在为适配器使用“android.R.layout.simple_list_item_1”。这是一个内置布局,仅包含一个textview

最好的方法是创建自己的视图,该视图由复选框和文本视图组成

然后创建您自己的适配器以充气视图并设置内容

public class CheckBoxListAdapter extends BaseAdapter{

 CheckBox[] boxes;

 public CheckBoxListAdapter(CheckBox[] boxes){
  this.boxes = boxes;
 }
 @Override
 public View getView(int position, View convertView, ViewGroup parent{
   View v = inflate.inflate(R.layout.single_list_item, parent, false);

   CheckBox cb = (CheckBox)v.findViewById(R.id.single_item_cb);
   cb.setChecked(boxes[position].getChecked());

   TextView cb = (TextView )v.findViewById(R.id.single_item_tv);
   cb.setText(boxes[position].getText());

   // Here you can attach listeners and customise components
   return v;
 }
}
对于XML视图,您只需要一个带有textview的视图和一个与这些id匹配的复选框

那么就用这个来代替你的

同样使用此方法,由于您有一个Add按钮,您可以将Add函数写入适配器,然后它可以为您处理数据和显示:)

希望这有帮助


编辑:找到这个,可能很有用。如果你投反对票,他会解释得很清楚,并说出原因。我将更新这个问题。您将复选框添加到一个列表中,然后生成适配器,在默认的
ArrayAdapter
toString()方法调用时,您会看到该文本,我认为最好的方法是为populate
checkBox
编写您自己的适配器。您需要覆盖更多的方法,如getCount()和getItem()在
baseAdapter中