[英]ListView Checkbox Save State
我正在使用Checkbox與每個列表項,當用戶點擊任何復選框我將該列表項存儲到SQLite數據庫,但每當我重新啟動我的應用程序時,不檢查我之前檢查過的列表項。
那么如何將狀態保存到Checkbox?
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// convert view = design
View v = convertView;
if (v == null) {
holder = new ViewHolder();
v = vi.inflate(Resource, null);
holder.tvName = (TextView) v.findViewById(R.id.textView1);
holder.checkBox = (CheckBox) v.findViewById(R.id.cbBox);
boolean strDataExist = activity.myDb.Exists(actorList.get(position).getName());
if(strDataExist)
{
actorList.get(position).setChecked(true);
}
else
{
actorList.get(position).setChecked(false);
}
v.setTag(holder);
}
else
{
holder = (ViewHolder) v.getTag();
}
你應該在膨脹之前檢查每個數據是否在數據庫中,在結果的基礎上你應該檢查復選框的值,你沒有檢查。
你需要檢查一下
holder.checkBox.setChecked(true/false);
在getView方法中,代碼應該是
if(strDataExist)
{
holder.checkBox.setChecked(true);
}
else
{
holder.checkBox.setChecked(false);
}
我不確定你的問題,但我會盡力幫助你。
我認為您希望使用checked
或不依賴於您的checkbox
,具體取決於您之前是否已保存到database
。
在方法getView
您應該使用方法public boolean Exists(String strServiceName)
檢查數據庫中是否存在服務(您應該使用小寫作為方法名稱)。
...
holder.checkBox = (CheckBox) v.findViewById(R.id.cbBox);
holder.checkBox.setChecked(exists(actorList.get(position).getName().toString()));
問候。
更新如果要在數據庫中存在服務名稱時保存服務狀態。 這可以解決問題:
getView(...){
//...
if (databaseHandler.exists(serviceName)){
Service service = new Service(serviceName, holder.checkBox.isChecked());
databaseHandler.save(service);
}
}
試試這種方式,這對我有用
public class CustomAdapter extends BaseAdapter {
private final LayoutInflater inflater;
private final Context context;
private List<ModelPooja> listData;
public CustomAdapter(Context mainActivity, List<ModelPooja> listData) {
context = mainActivity;
this.listData = listData;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return listData.size();
}
@Override
public Object getItem(int position) {
return listData.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.list_item_poojaselection, null);
holder.tv = (TextView) convertView.findViewById(R.id.list_item_poojaname);
holder.checks = (CheckBox) convertView.findViewById(R.id.list_item_poojacheck);
convertView.setTag(holder);
}else {
holder = (ViewHolder) convertView.getTag();
}
holder.checks.setOnCheckedChangeListener(null);
holder.checks.setFocusable(false);
if (listData.get(position).isselected) {
holder.checks.setChecked(true);
} else {
holder.checks.setChecked(false);
}
holder.checks.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton cb, boolean b) {
if (checkMaxLimit()) {
if (listData.get(position).isselected && b) {
holder.checks.setChecked(false);
listData.get(position).isselected = false;
} else {
holder.checks.setChecked(false);
listData.get(position).isselected = false;
Toast.makeText(context, "Max limit reached", Toast.LENGTH_SHORT).show();
}
} else {
if (b) {
listData.get(position).isselected = true;
} else {
listData.get(position).isselected = false;
}
}
}
});
holder.tv.setText(listData.get(position).getPOOJA_LISTING_NAME());
return convertView;
}
public boolean checkMaxLimit() {
int countermax = 0;
for(ModelPooja item : listData){
if(item.isselected){
countermax++;
}
}
return countermax >= 5;
}
public class ViewHolder {
TextView tv;
public CheckBox checks;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.