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
我使用cursorAdapter是为了从数据库中填充listview?所以我没有从arrayAdapter中的getView方法中获得位置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);
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);
}
}
}