多选 ListView 上的复选框不可见
Checkbox not visible on multiple choice ListView
我希望我的列表视图显示复选框。目前,它只是一个普通的 listView,因为它只正确地呈现项目,唯一的问题是缺少复选框。我正在使用自定义适配器。
我在这里粘贴相关代码,如果需要我可以分享更多,Whosebug 告诉我代码太多如果我只粘贴整个代码。
Ps。 android.
初学者
在我的public class MainActivity extends 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);
}
在我的class GroceryAdapter extends 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"/>
您实际上是在为该行中的每一项显示您想要显示的视图:
convertView = inflater.inflate(R.layout.row_item, parent, false);
您的 row_item
布局只有 2 个 TextViews
因此它会为每个项目扩充该布局,并且由于其中没有任何复选框,这就是您看不到的原因他们。只需更改该布局以在您想要的任何位置包含一个复选框,它就会在那里。
无论是这个还是改变你正在膨胀的布局,我认为应该有一些预制的 Android 可以使用。
我希望我的列表视图显示复选框。目前,它只是一个普通的 listView,因为它只正确地呈现项目,唯一的问题是缺少复选框。我正在使用自定义适配器。
我在这里粘贴相关代码,如果需要我可以分享更多,Whosebug 告诉我代码太多如果我只粘贴整个代码。
Ps。 android.
初学者在我的public class MainActivity extends 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);
}
在我的class GroceryAdapter extends 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"/>
您实际上是在为该行中的每一项显示您想要显示的视图:
convertView = inflater.inflate(R.layout.row_item, parent, false);
您的 row_item
布局只有 2 个 TextViews
因此它会为每个项目扩充该布局,并且由于其中没有任何复选框,这就是您看不到的原因他们。只需更改该布局以在您想要的任何位置包含一个复选框,它就会在那里。
无论是这个还是改变你正在膨胀的布局,我认为应该有一些预制的 Android 可以使用。