0

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

    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 和我的 checkedtextview 的 xml

<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"

>

还有我的列表视图

<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();
4

1 回答 1

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,holder将listitem中的views绑定在一起。

3 setTag 到列表项的持有人

4 当点击它时,在statusArray中查找状态,并将适当的状态放入视图,然后notifyDatasetChange(如果是复选框,可能不需要,因为我在这里使用图像视图)你也可以更新数据库或此处的其他操作

对不起我的泳池英语,希望它可以帮助你

于 2012-02-23T02:35:13.277 回答