Android 如何在按钮单击上获取所有listview选中项? setContentView(R.layout.activity\u冲突); db=新的DatabaseHelper(此); sqLiteDatabase=db.getReadableDatabase(); 微调器=(微调器)findViewById(R.id.spinner1); 加载SpinnerData(); txtText=(TextView)findViewById(R.id.text); btnBack=(按钮)findViewById(R.id.btnBack); btnSave=(按钮)findviewbyd(R.id.btnSave); btnSave.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(视图){ listviewData(); } }); strSelectedItem=spinner.getSelectedItem().toString(); listview=(listview)findViewById(R.id.listview); LayoutInflater充气机=getLayoutInflater(); 视图组标题=(视图组)充气器。充气(R.layout.list_标题,listview,false); addHeaderView(头,null,false); listview.setChoiceMode(listview.CHOICE\u MODE\u MULTIPLE); list_query=“从TBL区段中选择_id、区段、违规、罚款”; Cursor clistview=sqLiteDatabase.rawQuery(list\u query,null); listadapter=新的listadapter(这个,clistview,0); setAdapter(listadapter);私有void listviewData(){ int cntChoice=listview.getCount(); 勾选字符串=”; 字符串未选中=”; SparseBooleanArray SparseBooleanArray=listview.getCheckedItemPositions(); for(int i=0;i

Android 如何在按钮单击上获取所有listview选中项? setContentView(R.layout.activity\u冲突); db=新的DatabaseHelper(此); sqLiteDatabase=db.getReadableDatabase(); 微调器=(微调器)findViewById(R.id.spinner1); 加载SpinnerData(); txtText=(TextView)findViewById(R.id.text); btnBack=(按钮)findViewById(R.id.btnBack); btnSave=(按钮)findviewbyd(R.id.btnSave); btnSave.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(视图){ listviewData(); } }); strSelectedItem=spinner.getSelectedItem().toString(); listview=(listview)findViewById(R.id.listview); LayoutInflater充气机=getLayoutInflater(); 视图组标题=(视图组)充气器。充气(R.layout.list_标题,listview,false); addHeaderView(头,null,false); listview.setChoiceMode(listview.CHOICE\u MODE\u MULTIPLE); list_query=“从TBL区段中选择_id、区段、违规、罚款”; Cursor clistview=sqLiteDatabase.rawQuery(list\u query,null); listadapter=新的listadapter(这个,clistview,0); setAdapter(listadapter);私有void listviewData(){ int cntChoice=listview.getCount(); 勾选字符串=”; 字符串未选中=”; SparseBooleanArray SparseBooleanArray=listview.getCheckedItemPositions(); for(int i=0;i,android,arrays,sqlite,listview,Android,Arrays,Sqlite,Listview,我使用cursorAdapter是为了从数据库中填充listview?所以我没有从arrayAdapter中的getView方法中获得位置 setContentView(R.layout.activity_violation); db = new DatabaseHelper(this); sqLiteDatabase = db.getReadableDatabase(); spinner = (Spinner) findViewById(R.id.spinner1);

我使用cursorAdapter是为了从数据库中填充listview?所以我没有从arrayAdapter中的getView方法中获得位置

setContentView(R.layout.activity_violation);
    db = new DatabaseHelper(this);
    sqLiteDatabase = db.getReadableDatabase();
    spinner = (Spinner) findViewById(R.id.spinner1);
    loadspinnerdata();
    txtTexts = (TextView) findViewById(R.id.texts);
    btnBack = (Button) findViewById(R.id.btnBack);
    btnSave = (Button) findViewById(R.id.btnSave);
    btnSave.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            listviewData();
        }


    });

    strSelectedItem = spinner.getSelectedItem().toString();


    listview = (ListView) findViewById(R.id.listView);
    LayoutInflater inflater = getLayoutInflater();
    ViewGroup header = (ViewGroup) inflater.inflate(R.layout.list_header, listview, false);
    listview.addHeaderView(header, null, false);
    listview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

    list_query = "select _id,section,offence,fine from tblSection";
    Cursor clistview = sqLiteDatabase.rawQuery(list_query, null);


    listadapter = new ListAdapter(this, clistview, 0);



    listview.setAdapter(listadapter);private void listviewData() {
    int cntChoice = listview.getCount();

    String checked = "";

    String unchecked = "";
    SparseBooleanArray sparseBooleanArray = listview.getCheckedItemPositions();

    for(int i = 0; i < cntChoice; i++)
    {

        if(sparseBooleanArray.get(i))
        {
            checked += listview.getItemAtPosition(i).toString() + "\n";
        }
        else  if(!sparseBooleanArray.get(i))
        {
            unchecked+= listview.getItemAtPosition(i).toString() + "\n";
        }

    }
公共类ListAdapter扩展了CursorAdapter{
TextView电视节、电视犯罪、电视ID、电视罚款;
复选框chkBox;
阵列自适应对象;
私有布尔chkItem;
CompoundButton.OnCheckedChangeListener我的检查列表;
公共ListAdapter(上下文上下文、游标c、int\u id){
super(上下文,c,_id);
}
@凌驾
公共视图新建视图(上下文上下文、光标、视图组视图组){
返回LayoutFlater.from(上下文)。充气(R.layout.listview\u项,viewGroup,false);
}
公共类视图持有者{
TextView电视节、电视犯罪、电视ID、电视罚款;
复选框chkBox;
布尔chkItem;
所选布尔值=false;
公共视图持有者(布尔chkItem){
超级();
this.chkItem=chkItem;
}
公众持票人(){
}
公选{
返回选中的;
}
已选择公共无效设置(已选择布尔值){
this.selected=selected;
}
}
@凌驾
公共void bindView(视图、上下文上下文、光标){
ViewHolder=null;
holder=新的ViewHolder();
holder.tvSection=(TextView)view.findViewById(R.id.txtSection);
holder.tvAventure=(TextView)view.findViewById(R.id.txtAventure);
holder.tvId=(TextView)view.findViewById(R.id.txtId);
holder.tvFine=(TextView)view.findViewById(R.id.txtFine);
holder.chkBox=(复选框)view.findViewById(R.id.CheckBox);
holder.chkBox.setOnCheckedChangeListener(MyCheckList);
视图.设置标签(支架);
strFine=cursor.getInt(cursor.getColumnIndexOrThrow(“_id”);
String strSection=cursor.getString(cursor.getColumnIndexOrThrow(“section”);
String strOffence=cursor.getString(cursor.getColumnIndexOrThrow(“冒犯”));
int strFine=cursor.getInt(cursor.getColumnIndexOrThrow(“fine”));
holder.tvSection.setText(strSection);
holder.tvOffence.setText(strOffence);
holder.tvFine.setText(String.valueOf(strFine));
最终视图持有者finalHolder=持有者;
}

我尝试了这个方法,但不起作用。我尝试了checkbox.setOnclicklistener,它为我提供单个项的选中行值,但不是多个选中项。我还尝试了sparseboolean数组


如果您试图使用复选框从列表中获取所选值,请尝试使用这种方法

public class ListAdapter extends CursorAdapter{

TextView tvSection,tvOffence,tvId,tvFine;
CheckBox chkBox;
ArrayAdapter<String> objects;
private boolean chkItem;
CompoundButton.OnCheckedChangeListener myCheckChangList;


public ListAdapter(Context context, Cursor c, int _id) {
   super(context, c,_id);
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup viewGroup) {
    return LayoutInflater.from(context).inflate(R.layout.listview_item,viewGroup,false);
}
public class ViewHolder{
    TextView tvSection,tvOffence,tvId,tvFine;
    CheckBox chkBox;
    boolean chkItem;
    boolean selected = false;
    public ViewHolder(boolean chkItem){
        super();
        this.chkItem=chkItem;
    }

    public ViewHolder() {

    }

    public boolean isSelected() {
        return selected;
    }
    public void setSelected(boolean selected) {
        this.selected = selected;
    }
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
   ViewHolder holder=null;


            holder = new ViewHolder();
            holder.tvSection = (TextView) view.findViewById(R.id.txtSection);
            holder.tvOffence = (TextView) view.findViewById(R.id.txtOffence);
            holder.tvId = (TextView) view.findViewById(R.id.txtId);
            holder.tvFine = (TextView) view.findViewById(R.id.txtFine);
            holder.chkBox = (CheckBox) view.findViewById(R.id.checkBox);
            holder.chkBox.setOnCheckedChangeListener(myCheckChangList);
            view.setTag(holder);
            strFine=cursor.getInt(cursor.getColumnIndexOrThrow("_id"));
            String strSection = cursor.getString(cursor.getColumnIndexOrThrow("section"));
            String strOffence = cursor.getString(cursor.getColumnIndexOrThrow("offence"));
            int strFine = cursor.getInt(cursor.getColumnIndexOrThrow("fine"));



            holder.tvSection.setText(strSection);
            holder.tvOffence.setText(strOffence);
            holder.tvFine.setText(String.valueOf(strFine));

    final ViewHolder finalHolder = holder;
公共类CardViewActivity扩展了AppCompatActivity{
专用工具栏;
私人回收视图mRecyclerView;
专用回收器查看适配器mAdapter;
private RecyclerView.LayoutManager MLLayoutManager;
私人名单学生名单;
私人按钮选择;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar=(toolbar)findviewbyd(R.id.toolbar);
btnSelection=(按钮)findViewById(R.id.btnShow);
studentList=newarraylist();

对于(inti=1;i在适配器外部单击,请使用以下代码。“ListAdapter”应为适配器类名

public class CardViewActivity extends AppCompatActivity {

 private Toolbar toolbar;

 private RecyclerView mRecyclerView;
 private RecyclerView.Adapter mAdapter;
 private RecyclerView.LayoutManager mLayoutManager;

 private List<Student> studentList;

 private Button btnSelection;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  toolbar = (Toolbar) findViewById(R.id.toolbar);
  btnSelection = (Button) findViewById(R.id.btnShow);

  studentList = new ArrayList<Student>();

  for (int i = 1; i <= 15; i++) {
   Student st = new Student("Student " + i, "androidstudent" + i
     + "@gmail.com", false);

   studentList.add(st);
  }

  if (toolbar != null) {
   setSupportActionBar(toolbar);
   getSupportActionBar().setTitle("Android Students");

  }

  mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);

  // use this setting to improve performance if you know that changes
  // in content do not change the layout size of the RecyclerView
  mRecyclerView.setHasFixedSize(true);

  // use a linear layout manager
  mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

  // create an Object for Adapter
  mAdapter = new CardViewDataAdapter(studentList);

  // set the adapter object to the Recyclerview
  mRecyclerView.setAdapter(mAdapter);

  btnSelection.setOnClickListener(new OnClickListener() {

   @Override
   public void onClick(View v) {
    String data = "";
    List<Student> stList = ((CardViewDataAdapter) mAdapter)
      .getStudentist();

    for (int i = 0; i < stList.size(); i++) {
     Student singleStudent = stList.get(i);
     if (singleStudent.isSelected() == true) {

      data = data + "\n" + singleStudent.getName().toString();
      /*
       * Toast.makeText( CardViewActivity.this, " " +
       * singleStudent.getName() + " " +
       * singleStudent.getEmailId() + " " +
       * singleStudent.isSelected(),
       * Toast.LENGTH_SHORT).show();
       */
     }

    }

    Toast.makeText(CardViewActivity.this,
      "Selected Students: \n" + data, Toast.LENGTH_LONG)
      .show();
   }
  });

 }

}
如果单击位于适配器内部,则忽略上面的代码并使用下面的代码

 ListAdapter.unCheck((ViewGroup)view.getParent());
在适配器中执行以下函数

 unCheck((ViewGroup)view.getParent());
publicstaticvoid取消选中(ViewGroup vg){
对于(int i=0;i
以上功能将选中列表视图的所有复选框。祝您玩得开心。保重

  public static void unCheck(ViewGroup vg) {
    for (int i = 0; i < vg.getChildCount(); i++) {
        View v = vg.getChildAt(i);
        if (v instanceof CheckBox) {
            ((CheckBox) v).setChecked(true);
        } else if (v instanceof ViewGroup) {
            unCheck((ViewGroup) v);
        }
    }
}