[英]Android- Save checkbox state in listview
我有帶有復選框和“保存”按鈕的列表視圖。
無論我選中哪個復選框並單擊保存按鈕,我都想將與那些選中的行相關的數據保存到數據庫中,這是我的代碼
public class CardDetailsAdapter extends BaseAdapter {
private static ArrayList<CardDetails> searchArrayList;
private LayoutInflater mInflater;
private boolean[] itemChecked = new boolean[100];
public CardDetailsAdapter(Context context, ArrayList<CardDetails> results) {
map = new HashMap<Integer, Boolean>();
searchArrayList = results;
mInflater = LayoutInflater.from(context);
}
public int getCount() {
return searchArrayList.size();
}
public Object getItem(int position) {
return searchArrayList.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView, final ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.welcomelistview, null);
holder = new ViewHolder();
holder.bankName = (TextView) convertView.findViewById(R.id.BankNameID);
holder.messages = (TextView) convertView.findViewById(R.id.messageID);
holder.chkbox = (CheckBox) convertView.findViewById(R.id.chkBoxID);
System.out.println("is checked==> " + holder.chkbox.isChecked());
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.bankName.setText(searchArrayList.get(position).getBankName());
holder.messages.setText(searchArrayList.get(position).getMessages());
holder.chkbox.setChecked(false);
// save position and checking status into tag
holder.chkbox.setTag(position);
holder.chkbox.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
HashMap<Integer, Boolean> mSimpleAdapter = new HashMap<Integer, Boolean>();
int p = (Integer) (v.getTag());
if (holder.chkbox.isChecked() == true) {
itemChecked[Integer.valueOf(position)] = holder.chkbox.isChecked();
}else{
itemChecked[Integer.valueOf(position)] = holder.chkbox.isChecked();
}
mSimpleAdapter.put(p, itemChecked[position]);
holder.chkbox.setChecked(itemChecked[position]);
}
});
return convertView;
}
static class ViewHolder {
TextView bankName;
TextView messages;
CheckBox chkbox;
}}
和活動 class
import com.ispl.CFSMS.helper.CardDetailsAdapter;
public class WelcomePage extends Activity{
CardDetailsAdapter mListAdapter;
ArrayList<Integer> arList = new ArrayList<Integer>();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.welcomepage);
final ArrayList<CardDetails> cardResults = GetCardDetails();
final ListView welcomelist = (ListView) findViewById(R.id.welcomelistID);
welcomelist.setAdapter(new CardDetailsAdapter(this, cardResults));
welcomelist.setOnItemLongClickListener(new OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView<?> a, View v, int position, long id) {
Object o = welcomelist.getItemAtPosition(position);
CardDetails fullObject = (CardDetails)o;
Intent r=new Intent(WelcomePage.this , CardMenuActivity.class);
r.putExtra("BankName", fullObject.getBankName());
r.putExtra("CardNumber", fullObject.getCardNumber());
startActivityForResult(r, position);
return false;
}
});
CheckBox checkbox = (CheckBox)findViewById(R.id.chkBoxID);
Button saveTODbBtn = (Button)findViewById(R.id.saveID);
saveTODbBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//get the checkbox status and save related details into database
Intent intent=new Intent(WelcomePage.this, BankProjectActivity.class);
startActivity(intent);
}
});
}
private ArrayList<CardDetails> GetCardDetails(){
ArrayList<CardDetails> carddetailresults = new ArrayList<CardDetails>();
CardDetails sr1 = new CardDetails();
sr1.setBankName("Select All");
sr1.setCardNumber("");
sr1.setMessages("");
carddetailresults.add(sr1);
sr1 = new CardDetails();
sr1.setBankName("HDFC Bank" +" "+ "xxxxx1234");
sr1.setMessages("Messages: " + "10");
carddetailresults.add(sr1);
sr1 = new CardDetails();
sr1.setBankName("ICICI" + " "+ "xxxxx2134");
sr1.setMessages("Messages: 5");
carddetailresults.add(sr1);
sr1 = new CardDetails();
sr1.setBankName("HSBC" + " "+ "xxxxx8796");
sr1.setMessages("Messages: 2");
carddetailresults.add(sr1);
return carddetailresults;
}}
在 Adaptar class 中,我可以獲得狀態。 但是我如何保存這些狀態並獲取活動 class 中的所有狀態,以便在單擊保存按鈕時保存與那些選中的行相關的所有數據...?
您好,在GetCardDetails()
方法中添加sr1.setSelected(true)
或sr1.setSelected(false)
在適配器中添加以下內容
public static ArrayList<Boolean> itemChecked1 = null;
public CardDetailsAdapter( Context context, ArrayList<CardDetails> results) {
super( context, R.layout.welcomelistview, R.id.BankNameID, results );
searchArrayList = results;
getContext = context;
mInflater = LayoutInflater.from(context) ;
itemChecked1 = new ArrayList<Boolean>();
for (int i = 0; i < results.size(); i++) {
itemChecked1.add(i, results.get(i).isSelected()); // initializes all items value with false
}
}
在getview中
holder.chkbox.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
CheckBox cb = (CheckBox) v;
CardDetails planet = (CardDetails) cb.getTag();
//planet.setSelected(cb.isChecked());
if (holder.chkbox.isChecked()) {
itemChecked1.set(position, true);
holder.chkbox.setChecked(true);
planet.setSelected(true);
} else if (!holder.chkbox.isChecked()) {
itemChecked1.set(position, false);
holder.chkbox.setChecked(false);
planet.setSelected(false);
}
}
});
public View getView(final int position, View convertView,ViewGroup paramViewGroup)
{
final ViewHolder holder;
LayoutInflater inflater=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
if (convertView == null)
{
convertView=inflater.inflate(R.layout.addressbook, null);holder = new ViewHolder();
holder.adddress_name=(TextView)convertView.findViewById(R.id.addressbook_name);
holder.adddress_number=(TextView)convertView.findViewById(R.id.address_number);
holder.adddress_name.setText(adddressbook_name.get(position).toString().trim())
holder.adddress_number.setText(addressbook_number.get(position).toString().trim());
holder.addressbook_check=(CheckBox)convertView.findViewById(R.id.address_check);convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
holder.addressbook_check.setId(position);
holder.addressbook_check.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
CheckBox cb = (CheckBox) v;
int id = cb.getId();
if (thumbnailsselection[id])
{
cb.setChecked(false);
thumbnailsselection[id] = false;
}
else
{
cb.setChecked(true);
thumbnailsselection[id] = true;
}
}
});
holder.addressbook_check.setChecked(thumbnailsselection[position]);
return convertView;
}
class ViewHolder
{
TextView adddress_name;
TextView adddress_number;
CheckBox addressbook_check;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.