android保存checkedtextview检查

时间:2012-02-23 01:56:19

标签: android listview checkedtextview

我在每个视图中都有一个带有checkedtextview的列表视图,我的所有项目都通过数据库进行操作,一切正常,但是我无法保存列表项的已检查状态,每次点击都有一个可绘制的设置,但我如果我开始另一项活动,不知道如何保存它,我非常感谢代码的答案,谢谢 请帮助!

    listview.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> arg0, View v, int position,
                long id) {
            // TODO Auto-generated method stub
            CheckedTextView tt = (CheckedTextView) v
                    .findViewById(R.id.checkedview1);
                    if (!tt.isChecked()) {
                    tt.setChecked(true);

                    tt.setCheckMarkDrawable(R.drawable.checkedbox);
                    } else {
                    tt.setChecked(false);
                    tt.setCheckMarkDrawable(R.drawable.nullbox);
                    }
        }

    });

这是我的listview的xml和我的checkedtextview

<CheckedTextView 
  xmlns:android="http://schemas.android.com/apk/res/android"      
  android:id="@+id/checkedview1" 
  android:paddingLeft="20dip" 
  android:paddingRight="20dip" 
  android:paddingTop="10dip"
  android:paddingBottom="10dip" 
  android:orientation="vertical" 
  android:layout_width="fill_parent" 
  android:layout_height="?android:attr/listPreferredItemHeight"  
  android:gravity="center_vertical"  
  android:checkMark="@drawable/nullbox"
  android:textSize = "18sp"
  android:textColor="#000000"
  android:listSelector="#ef0000"

&GT;

我的listview

<ListView
    android:id="@+id/list1"
    android:layout_width="match_parent"
    android:layout_height="404dp"
    android:cacheColorHint="#ffffff" />

这是我用来加载我的列表的适配器             checklistDB.open();         c = checklistDB.getAllTask​​s();

    for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
        String task = c.getString(1);
        adapter.add(task);
    }
    checklistDB.close();

1 个答案:

答案 0 :(得分:0)

class CheckAdapter extends BaseAdapter {
    class NormalListHolder {
        ImageView check;
    }

    LayoutInflater layoutInflater;
    NormalListHolder normalListHolder;

    public CheckAdapter(Context context) {
        layoutInflater = LayoutInflater.from(context);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = layoutInflater.inflate(R.layout.list_item,
                    null);
            normalListHolder = new NormalListHolder();
            convertView.setTag(normalListHolder);
        } else {
            normalListHolder = (NormalListHolder) convertView.getTag();
        }

        normalListHolder.favoriteTag.setId(position);
        normalListHolder.favoriteTag
                .setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (favoriteStatus.get(v.getId())) { // favorite
                            favoriteStatus.set(v.getId(), false);
                            normalListHolder.favoriteTag.setImageSrc();
                        } else {
                            favoriteStatus.set(v.getId(), true);
                            normalListHolder.favoriteTag.setImageSrc();
                        }
                        notifyDataSetChanged();
                    }
                });
        return convertView;
    }

}

我从我的代码编辑,但我不确定它是否有效(我编辑它不是很小心),我将解释我在下面做的事情:

1创建一个保存项目状态的ArrayList(或者滚动列表视图时复选框会混淆)

ArrayList<Boolean> favoriteStatus = new ArrayList<Boolean>();

2创建一个新的Adpater,并在其中创建一个 holder ,持有者将listitem中的视图绑定在一起。

通过持有人

将3个标签添加到列表项目中

4点击它,在statusArray中查找状态,并在视图中输入正确的状态,然后发出notifyDatasetChange(如果它是一个复选框,可能不需要,因为我在这里使用了imageview)你也是可以在这里更新数据库或其他操作

抱歉我的游泳池英语,希望它可以帮到你