0

各ビューに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);
                    }
        }

    });

これが私のリストビューと私の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" />

これは、リストをロードするために使用するアダプターです。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 を作成し、その中にホルダーを作成します。ホルダーは listitem 内のビューをバインドします。

3 ホルダーによるリスト項目への setTag

4 クリックしたら、statusArray でステータスを探し、ビューに適切なステータスを入力してから、notifyDatasetChange (チェックボックスの場合は、ここでイメージビューを使用するため必要ないかもしれません) データベースの更新またはその他のアクションはこちら

私のプール英語でごめんなさい、それがあなたを助けることを願っています

于 2012-02-23T02:35:13.277 に答える