2013-03-26 58 views
0

我在課程中列出了一系列練習。用戶可以修改這個練習來顯示與否。當他點擊練習時,改變狀態(顯示或不顯示)練習。 對數據庫所做的所有更改都可以正常工作。但是,當用戶進行更改時,當您滾動瀏覽圖片時,「檢查​​」在新興行中顯示不正確。ListView在更新日期後滾動時顯示不正確的數據基地

protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
.... 
db = new MyDatabase(this); 
getOnListExes(); 
db.close(); 
} 
.... 
    public void getOnListExes() { 
    onListExesChek = db.getListExes(prog_man, prog_woman, orderBy);   
    sAdapter = new SimpleCursorAdapter(this, 
      R.layout.exeslist, onListExesChek, 
      new String[] {"exes_bodypart", "exes_name", "exes_name"}, 
      new int[] {R.id.exesPartlist_chek, R.id.exesNamelist_chek, 
R.id.chek_img}) { 

     public View getView(int position, View convertView, ViewGroup parent) { 
       View row = super.getView(position, convertView, parent); 
       TextView exesPartlist_chek = 
(TextView) row.findViewById(R.id.exesPartlist_chek); 
       TextView exesNamelist_chek = 
(TextView) row.findViewById(R.id.exesNamelist_chek); 
       ImageView imageGender = 
(ImageView) row.findViewById(R.id.chek_img); 
       return row; 
     } 
    }; 
    sAdapter.setViewBinder(new MyViewBinder()); 
    listExesChek.setAdapter(sAdapter); 
    } 

public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
    positionChek = position; 
    selectExe_id = Long.toString(id); 
    db = new MyDatabase(this); 
    onListExesChek = db.getListExes(prog_man, prog_woman, orderBy); 
    onListExesChek.moveToPosition(positionChek); 

    if (
onListExesChek.getInt(onListExesChek.getColumnIndex("prog_man_chek")) 
>= Integer.valueOf(prog_man).intValue() & 
     onListExesChek.getInt(onListExesChek.getColumnIndex("prog_woman_chek")) 
>= Integer.valueOf(prog_woman).intValue()) { 
     if(prog_man.equals("1")) { 
      prog_man_chek = new ContentValues(); 
      prog_man_chek.put("prog_man_chek", "0");  
      int upProg_man_chek = db.setExe(prog_man_chek, 
selectExe_id); 
     } 
     if(prog_woman.equals("1")) { 
      prog_woman_chek = new ContentValues(); 
      prog_woman_chek.put("prog_woman_chek", "0"); 
      int upProg_woman_chek = db.setExe(prog_woman_chek, 
selectExe_id); 
    } else { 
     if(prog_man.equals("1")) { 
      prog_man_chek = new ContentValues(); 
      prog_man_chek.put("prog_man_chek", "1"); 
      int upProg_man_chek = db.setExe(prog_man_chek, 
selectExe_id); 
     } 
     if(prog_woman.equals("1")) { 
      prog_woman_chek = new ContentValues(); 
      prog_woman_chek.put("prog_woman_chek", "1"); 
      int upProg_woman_chek = db.setExe(prog_woman_chek, 
selectExe_id); 
     } 
    } 
    db.close(); 
    updateView(position); 
} 

void updateView(int index){ 
    db = new MyDatabase(this); 
    onListExesChek = db.getListExes(prog_man, prog_woman, orderBy); 
    onListExesChek.moveToPosition(positionChek); 
    View v = listExesChek.getChildAt(index - 
      listExesChek.getFirstVisiblePosition()); 
    if (
    onListExesChek.getInt(onListExesChek.getColumnIndex("prog_man_chek")) 
>= Integer.valueOf(prog_man).intValue() & 
    onListExesChek.getInt(onListExesChek.getColumnIndex("prog_woman_chek")) 
>= Integer.valueOf(prog_woman).intValue() 
    ) { 
     ImageView imageGender = (ImageView) v.findViewById(R.id.chek_img); 
     imageGender.setImageResource(R.drawable.check); 
    } else { 
     ImageView imageGender = (ImageView) v.findViewById(R.id.chek_img); 
     imageGender.setImageResource(R.drawable.notchek); 
    } 
    db.close(); 
} 

class MyViewBinder implements SimpleCursorAdapter.ViewBinder { 
    public boolean setViewValue (View view, Cursor cursor, int columnIndex) { 
     switch (view.getId()) { 
     case R.id.chek_img: 
      if (onListExesChek.getInt(onListExesChek. 
getColumnIndex("prog_man_chek")) 
>= Integer.valueOf(prog_man).intValue() & 
onListExesChek.getInt(onListExesChek.getColumnIndex("prog_woman_chek")) 
>= Integer.valueOf(prog_woman).intValue() 
        ) { 
       ((ImageView) view).setImageResource(R.drawable.check); 
      } else { 
       (
(ImageView) view).setImageResource(R.drawable.notchek); 
      }  
     return true; 
     } 
     return false; 
    } 
    } 

回答

0

這是ListView的視圖回收的副作用。您不在getView方法中設置默認資源,因此ImageView將「保留」您在updateView方法中設置的任何內容。這種效果在更長的列表中顯而易見,您會看到重複的錯誤狀態。

您應該可以通過在getView方法中設置ImageView的狀態來解決這個問題。

+0

感謝您的回答!你能給我一個鏈接,在那裏我可以讀到如何正確插入getView到updateView方法?請。我是初學者。 – Roman 2013-03-26 18:40:40

相關問題