2016-07-07 141 views
0

我正在做一個ToDo List並且在從ListView中刪除一個項目時遇到麻煩。Android Studio,刪除ListView項目而不影響另一個項目

如果用戶已經做到了名單上的一件事,他可以點擊該項目,這將是要麼刪除線通過,或罷工trhough將被撤銷:

lv.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      TextView tv = (TextView) view; 
      int i_strikethrough = tv.getPaintFlags(); 
      if(i_strikethrough == 1297){ 
       tv.setPaintFlags(tv.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG)); 
      } else if (i_strikethrough == 1281){ 
       tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); 
      } 
     } 
    }); 

如果用戶做長點擊,一條消息會彈出,他可以選擇刪除此項目:

lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener(){ 
     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) { 
      AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context); 
      alertDialogBuilder.setTitle("Delete"); 
      alertDialogBuilder.setMessage("Are you sure you want to delete?"); 
      alertDialogBuilder.setCancelable(false); 
      alertDialogBuilder.setPositiveButton("Yes", new DialogInterface.OnClickListener() 
      { 
       @Override 
       public void onClick(DialogInterface dialogInterface, int i) 
       { 
        adapterInhalt.remove(adapterInhalt.getItem(position)); 
       } 
      }); 
      alertDialogBuilder.setNegativeButton("No", new DialogInterface.OnClickListener() 
      { 
       @Override 
       public void onClick(DialogInterface dialogInterface, int i) 
       { 
        dialogInterface.cancel(); 
       } 
      }); 
      AlertDialog alertDialog = alertDialogBuilder.create(); 
      alertDialog.show(); 

      return true; 
     } 
    }); 

現在,我的問題是:

想象中的第二項是通過刪除線,但THI rd不是。

如果我刪除第二個項目,那麼第三個項目是在第二個地方,並通過。但它不應該通過。

我希望您瞭解我的問題,並且您可以幫助我解決此問題。

我希望這張照片將幫助你瞭解問題: A helping Picture

+0

我們需要看看你的完整的適配器代碼..! –

回答

0

你沒有正確實施的列表視圖。列出視圖回收視圖。這意味着他們重複使用相同的視圖,並將不同的位置放入列表中。這提供了非常高效的UI代碼。這也意味着,如果您對適配器的getView以外的視圖進行了任何更改,那麼當您移除或滾動時,這些更改將應用​​於錯誤的項目。

製作listview的寫入方式是,如果要更新任何位置的UI,請更改該位置的模型。您通過調用notifyDataSetChanged()來告訴適配器它需要更新。然後調用getView函數來重繪每個可見元素,並應該應用穿透。

0

您應該爲您的物品定義一個類,該物品具有罷工狀態的布爾型字段。例如:

public class MyItem{ 
    String name; 
    boolean isStriked; 
} 

,那麼你可以檢查的項目是通過刪除線在適配器的getView()方法。您可以通過這種方式增加代碼的凝聚力。順便說一句,我建議使用RecyclerView,因爲它具有預定義的方法和動畫刪除項目

+0

我不知道有什麼像RecyclerView。謝謝。我會有一個樂趣。 – DIvin93