我正在使用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();
}
答案 0 :(得分:4)
你应该在膨胀之前检查每个数据是否在数据库中,在结果的基础上你应该检查复选框的值,你没有检查。
您需要检查
holder.checkBox.setChecked(true/false);
答案 1 :(得分:3)
在getView方法中,代码应为
if(strDataExist)
{
holder.checkBox.setChecked(true);
}
else
{
holder.checkBox.setChecked(false);
}
答案 2 :(得分:0)
我不确定你的问题,但我会尽力帮助你。
我认为您希望checkbox
checked
与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);
}
}
问候。
UPDATE 如果要在数据库中存在服务名称时保存服务状态。这可以解决问题:
let explosionEmitterNode = SKEmitterNode(fileNamed:"the file name")
sprite.addChild(explosionEmitterNode)
答案 3 :(得分:0)
尝试这种方式,这对我有用
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;
}
}