2012-02-23 3 views
0

У меня есть listview с проверенным текстом в каждом представлении, все мои элементы обрабатываются через базу данных, все работает, но я не могу сохранить проверенное состояние элементов списка, у меня есть набор для каждого набора нажмите, но я не знаю, как сохранить его, если я начну другую деятельность. Ответ с кодом был бы весьма признателен, спасибо ПОЖАЛУЙСТА, ПОМОГИТЕ!android save checkedtextview check

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 для моей ListView и мой 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

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

это адаптер я использовать для нагрузка мой список контрольный списокDB.open(); c = checklistDB.getAllTasks();

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 которые сохранили статус элемента (или при прокрутке ListView флажок будет путать)

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

2 создать новую Adpater, и сделать держатель в нем, держатель связать взгляды в listi вместе.

3 SetTag к ListItem держателя

4, когда нажмите на него, обратите внимание на статус в statusArray, и поставить надлежащее состояние к представлению, то notifyDatasetChange (если это флажок, возможно, не нужен , потому что я использую изображение здесь), вы также можете обновить базу данных или другие действия здесь

извините за мой бассейн English, надеюсь, что он может вам помочь