2016-07-07 16 views
0

ToDoリストを作成していて、ListViewからアイテムを削除する際に問題があります。ユーザーは、自分のリストに一つのことを行っている場合Android Studio、別のアイテムに影響を与えずにListViewアイテムを削除する

、彼はその項目をクリックすることができますし、それが通じstrikedされるか、ストライク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; 
     } 
    }); 

は今、私の問題は、以下の通りである。

2番目の項目が貫通strikedさを想像しますがTHI rdはそうではありません。

私は2番目の項目を削除した場合、第3項は、第二の場所にあり、スルーstrikedされます。しかし、それはストライキされるべきではありません。

私はあなたが私の問題を理解し、あなたがこの問題を解決する私を助けることができることを願っています。

私は、この絵は、あなたが問題を理解するのに役立つことを願っています: A helping Picture

+0

あなたの完全なアダプターコードを調べる必要があります。 –

答えて

0

をあなたが適切にリストビューを実装していません。リストビューはビューをリサイクルします。つまり、同じビューを再利用して、リスト内の異なる位置をそれらのビューに入れます。これにより、非常に効率的なUIコードが提供されます。また、アダプターのgetView以外のビューに変更を加えると、それらの変更が削除またはスクロール時に間違った項目に適用されることを意味します。

リストビューを作成するための書込み方法は、あなたが任意の位置のUIを更新したい場合、あなたはその位置のモデルを変更することです。アダプタを通知するには、notifyDataSetChanged()を呼び出して更新する必要があります。次に、getView関数が呼び出されて可視要素を再描画し、ストライクを適用する必要があります。

0

アイテムのクラスを定義する必要があります。ストライクステータスのブール値フィールドがあります。例えば:アイテムは、アダプタのgetView()法に通じstrikedされている場合

public class MyItem{ 
    String name; 
    boolean isStriked; 
} 

、あなたは確認することができます。このようにコード内の結束を増やすことができます。私はRecyclerViewを使用することをお勧めします。それはアイテムの削除のためのメソッドとアニメーションをあらかじめ定義しています。

+0

私はRecyclerViewのようなものがあることを知らなかった。ありがとうございました。私はそれにlokを持っています。 – DIvin93

関連する問題