2012-02-23 54 views
0

我有在每個視圖中checkedtextview的列表視圖,我的所有項目都通過數據庫操作,一切正常,但我不能保存列表項的選中狀態,我有一個可繪製的設置爲每個點擊,但我不知道如何保存它,如果我開始另一項活動,與代碼的答案將不勝感激,謝謝 請幫助!android保存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); 
        } 
     } 

    }); 

這裏是我的列表視圖的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" 

>

而我的列表視圖

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

回答

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創建一個新的適配器可並作出在它的持有人綁定在LISTI意見一起工作。

3 setTag到列表項的持有人

4時,點擊它,尋找在statusArray狀態,並把正確的狀態視圖,然後notifyDatasetChange(如果它是一個複選框,也許並不需要,因爲我在這裏使用一個ImageView的),你也可以做更新數據庫或其它在這裏的行動

對不起我的英語池,希望它可以幫助你