Android 如何知道使用复选框和列表视图选中了哪一行?

Android 如何知道使用复选框和列表视图选中了哪一行?,android,listview,checkbox,android-listview,android-checkbox,Android,Listview,Checkbox,Android Listview,Android Checkbox,下面是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)

下面是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);
      }
      }
    
  • 下面是使用ListView的活动

    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();
            }
       });
     }
     }
    
    public class CategorySelection06扩展了AppCompative活动{
    Singleton s1=Singleton.getInstance();
    列表视图列表视图;
    //创建适配器
    CategoryAdapter06适配器=新CategoryAdapter06();
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    设置内容视图(R.layout.activity\u category\u selection06);
    listview=(listview)findViewById(R.id.listview1);
    setAdapter(适配器);
    //添加项目
    适配器。附件(“Pets”);
    adapter.addItem(“歌手”);
    adapter.addItem(“游戏”);
    adapter.addItem(“国家”);
    按钮按钮=findViewById(R.id.button6);
    setOnClickListener(新视图.OnClickListener(){
    @凌驾
    公共void onClick(视图){
    对于(int i=0;i
  • 我的ListView的表单如下所示:TextView------复选框

    我想做这样一个活动:如果用户选中复选框,那么选中行的文本将保存在Singleton类的ArrayList中

    例如,如果用户选中了“Pets”和“Nations”复选框,则这些单词将进入ArrayList s1.ListViewCategory,它位于Singleton类中

    我在CategorySelection活动中尝试过循环和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();
                }
    
    button.setOnClickListener(新视图.OnClickListener(){
    @凌驾
    公共void onClick(视图){
    对于(int i=0;i
    但是,getCheck()不起作用,因为setCheck()不在CategoryAdapter类的addItem()中

    我试图将setCheck()放在addItem()方法中,但后来我不得不在add()中放入另一个参数,然后出现红线和错误

    由于我是一个新手,我从网站上复制了这些代码,但我并不真正了解使用CheckableRelativeLayout的想法

    此布局显示复选框是否选中,但不指示选中了哪一行

    总而言之,我的问题是“如何从多个选中的行中获取文本,并知道选中了哪一行?”

    我知道这个问题很长,但我真的需要解决这个问题。。。
    如果有人回答我的问题,我将不胜感激。谢谢你,没有人回答,所以我自己解决了

     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();
    
    SparseBooleanArray checkedItems=listview.getCheckedItemPositions();
    int count=adapter.getCount();
    for(int i=0;i
     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();