gpt4 book ai didi

android - 如何获取从 ListView 中选中的选中项目?

转载 作者:行者123 更新时间:2023-11-30 03:15:18 25 4
gpt4 key购买 nike

您好,我正在尝试获取选中的项目并将其存储在数据库中,但是当我单击“保存”按钮以获取选中项目的大小时,每次大小都为零。当单击列表项时,它会给出选中项目的唯一大小,但如果未选中项目,则仍然如此。所以它为我创造了问题帮助我谢谢。这是我的代码是

自定义适配器.java

public class CustomAdapter extends ArrayAdapter<ContactDetails>{

List<ContactDetails> listcontacts=null;
private LayoutInflater mInflater=null;
private SparseBooleanArray mSelectedItemsIds;

public CustomAdapter(Activity context, List<ContactDetails> list) {
super(context, 0);
mInflater = context.getLayoutInflater();
mSelectedItemsIds = new SparseBooleanArray(list.size());
this.listcontacts=list;
}

@Override
public int getCount() {
return listcontacts.size();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

View view = null;
if (convertView == null) {

view = mInflater.inflate(R.layout.contacts_row, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.txtname = (TextView) view.findViewById(R.id.textView_name);
viewHolder.txtphonenum = (TextView) view.findViewById(R.id.textView_phonenum);
viewHolder.checkbox = (CheckBox) view.findViewById(R.id.checkBox_check);
viewHolder.checkbox.setFocusable(false);
viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
ContactDetails element = (ContactDetails) viewHolder.checkbox.getTag();
element.setSelected(buttonView.isChecked());


}
});

view.setTag(viewHolder);
viewHolder.checkbox.setTag(listcontacts.get(position));
} else {
view = convertView;
((ViewHolder) view.getTag()).checkbox.setTag(listcontacts.get(position));
}
ViewHolder holder = (ViewHolder) view.getTag();
holder.txtname.setText(listcontacts.get(position).getName());
holder.txtphonenum.setText(listcontacts.get(position).getPhonenumber());
holder.checkbox.setChecked(listcontacts.get(position).isSelected());
return view;
}

private static class ViewHolder {

TextView txtname;
TextView txtphonenum;
CheckBox checkbox;

}
}

MuListview类是

    public class AddChoiceContactList extends Activity implements OnClickListener, OnItemClickListener{

private ListView listview=null;
private Context context=null;
private DataBaseHelper db=null;
CustomAdapter adapter=null;
private Button btnsave=null;

List<ContactDetails> list=new ArrayList<ContactDetails>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.choicelist);
context=this;

listview =(ListView)findViewById(R.id.listView_choice);
btnsave=(Button)findViewById(R.id.button_save);
btnsave.setOnClickListener(this);
listview.setOnItemClickListener(this);


}
@Override
protected void onResume() {
super.onResume();

list=db.GetDataContacts();
if(list.size()>0){
//listview=getListView();
Toast.makeText(context, "size is: "+list.size(), Toast.LENGTH_LONG).show();
adapter=new CustomAdapter(AddChoiceContactList.this, list);
listview.setAdapter(adapter);
listview.setItemsCanFocus(false);
listview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

}
else{
Toast.makeText(context, "No Contacts Add contats plz!", Toast.LENGTH_LONG).show();
}
}


@Override
public void onClick(View arg0) {

SparseBooleanArray checked=listview.getCheckedItemPositions();
// here m getting size zero when checked then Toast.makeText(context, "checked size is: "+checked.size(), Toast.LENGTH_LONG).show();
ArrayList<UpdatedContact> selectedItems = new ArrayList<UpdatedContact>();
for (int i = 0; i < checked.size(); i++) {
int position = checked.keyAt(i);
if (checked.valueAt(i)){
ContactDetails detils=adapter.getItem(position);

}
}

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {

}

}

最佳答案

先拿个单子(monad)ArrayList<ContactDetails> checkedList作为 gloabl 并在构造函数中初始化它..

在自定义适配器中编写如下方法

private ArrayList<ContactDetails> getCheckedItems() {
return checkedList;
}

并像这样更改您的复选框更改监听器..

checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
checkedList.add(list.get(position));
}else {
checkedList.remove(list.get(position));
}
}
});

然后调用adapter.getCheckedItems();在你的onItemClickListener你的Activity

然后你会得到所有勾选的项目..

关于android - 如何获取从 ListView 中选中的选中项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20241350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com