我如何知道使用复选框和列表视图检查了哪一行?
Posted
技术标签:
【中文标题】我如何知道使用复选框和列表视图检查了哪一行?【英文标题】:How can I know which row is checked using checkbox and listview? 【发布时间】:2020-04-20 00:15:56 【问题描述】:下面是ListView项类
public class CategoryItem06
private String text;
private boolean checked;
public void setText(String text)
this.text = text;
public String getText()
return this.text;
// public void setCheck(boolean checked)
this.checked = checked;
// public boolean getCheck()
return this.checked;
下面是适配器
public class CategoryAdapter06 extends BaseAdapter
public ArrayList<CategoryItem06> listViewItemList = new ArrayList<CategoryItem06>() ;
public CategoryAdapter06()
@Override
public int getCount()
return listViewItemList.size() ;
@Override
public View getView(int position, View convertView, ViewGroup parent)
final int pos = position;
final Context context = parent.getContext();
if (convertView == null)
LayoutInflater inflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.category_item06, parent, false);
TextView textTextView = (TextView) convertView.findViewById(R.id.textView1) ;
CheckBox checkBox=(CheckBox) convertView.findViewById(R.id.checkBoxMafia);
CategoryItem06 listViewItem = listViewItemList.get(position);
textTextView.setText(listViewItem.getText());
checkBox.setChecked(listViewItem.getCheck());
return convertView;
@Override
public long getItemId(int position)
return position ;
@Override
public Object getItem(int position)
return listViewItemList.get(position) ;
public void addItem( String text)
CategoryItem06 item = new CategoryItem06();
item.setText(text);
listViewItemList.add(item);
下面是可检查的相对布局
public class CategoryCheckableRelativeLayout extends RelativeLayout implements Checkable
public CategoryCheckableRelativeLayout(Context context, AttributeSet attrs)
super(context, attrs);
// mIsChecked = false ;
@Override
public boolean isChecked()
CheckBox cb = (CheckBox) findViewById(R.id.checkBoxMafia);
return cb.isChecked();
// return mIsChecked ;
@Override
public void toggle()
CheckBox cb = (CheckBox) findViewById(R.id.checkBoxMafia);
setChecked(cb.isChecked() ? false : true);
// setChecked(mIsChecked ? false : true) ;
@Override
public void setChecked(boolean checked)
CheckBox cb = (CheckBox) findViewById(R.id.checkBoxMafia);
if (cb.isChecked() != checked)
cb.setChecked(checked);
下面是使用ListView的Activity
public class CategorySelection06 extends AppCompatActivity
Singleton s1 = Singleton.getInstance();
ListView listview;
// Creating Adapter
CategoryAdapter06 adapter = new CategoryAdapter06();
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_category_selection06);
listview = (ListView) findViewById(R.id.listview1);
listview.setAdapter(adapter);
// Adding Items
adapter.addItem("Pets");
adapter.addItem("Singers");
adapter.addItem("Game");
adapter.addItem("Nations");
Button button = findViewById(R.id.button6);
button.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
for (int i = 0; i < adapter.listViewItemList.size(); i++)
if (adapter.listViewItemList.get(i).getCheck())
s1.ListViewCategory.add(adapter.listViewItemList.get(i).getText());
Intent intent = new Intent(getApplicationContext(), RoleSelection07.class);
startActivity(intent);
finish();
);
我的ListView的表单是这样的:TextView ------- Checkbox
我想做一个这样的活动:如果用户选中复选框,则选中的行的文本保存在 Singleton 类的 ArrayList 中。
例如,如果用户选中“Pets”和“Nations”复选框,那么这些词将进入 ArrayList s1.ListViewCategory,它位于 Singleton 类中。
我在 CategorySelectionActivity 中尝试过 for 循环和 if 语句,如下所示:
button.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
for (int i = 0; i < adapter.listViewItemList.size(); i++)
if (adapter.listViewItemList.get(i).getCheck())
s1.ListViewCategory.add(adapter.listViewItemList.get(i).getText());
Intent intent = new Intent(getApplicationContext(), RoleSelection07.class);
startActivity(intent);
finish();
但是,getCheck() 不起作用,因为 setCheck() 不在 CategoryAdapter 类的 addItem() 中。
我尝试将setCheck()放在addItem()方法中,但后来我必须在add()中放另一个参数,然后出现红线和错误。
由于我是新手,我从网站上复制了这些代码,但我并没有真正理解使用 CheckableRelativeLayout 的想法。
此布局显示复选框是否被选中,但不表示选中了哪一行。
总而言之,我的问题是'如何从被检查的多行中获取文本,并知道检查了哪一行?
我知道这个问题很长,但我真的需要解决这个问题...... 如果有人回答我的问题,我将非常感激谢谢
【问题讨论】:
【参考方案1】:没有人回答,所以我自己修好了。
SparseBooleanArray checkedItems = listview.getCheckedItemPositions();
int count = adapter.getCount();
for (int i = 0; i < count; i++)
if (checkedItems.get(i))
s1.ListViewCategory.add(adapter.listViewItemList.get(i).getText());
listview.clearChoices();
Intent intent = new Intent(getApplicationContext(), RoleSelection07.class);
startActivity(intent);
finish();
【讨论】:
以上是关于我如何知道使用复选框和列表视图检查了哪一行?的主要内容,如果未能解决你的问题,请参考以下文章