2016-07-07 3 views
0

ToDo 목록을 만들고 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; 
     } 
    }); 

을, 내 문제는 다음과 rd는 그렇지 않습니다.

두 번째 항목을 삭제하면 세 번째 항목이 두 번째 위치에 있고 취소됩니다. 그러나 그것을 통해 striked해서는 안됩니다.

내 문제를 이해하고이 문제를 해결하는 데 도움이되기를 바랍니다.

나는이 그림이 문제를 이해하는 데 도움이되기를 바랍니다 : 당신은 제대로 목록보기를 구현하지 않는 A helping Picture

+0

전체 어댑터 코드를 살펴 봐야합니다 !! –

답변

0

. 목록보기는보기를 재활용합니다. 즉, 동일한 견해를 재사용하고 귀하의 목록에 다른 포지션을 배치합니다. 이것은 매우 효율적인 UI 코드를 제공합니다. 또한 어댑터의 getView 외부에서 뷰를 변경하면 제거 또는 스크롤 할 때 해당 변경 사항이 잘못된 항목에 적용된다는 것을 의미합니다.

목록 뷰를 작성하는 방법은 위치의 UI를 업데이트하려는 경우 해당 위치의 모델을 변경하는 것입니다. 그런 다음 어댑터에 notifyDataSetChanged()를 호출하여 업데이트해야한다고 알려줍니다. 그런 다음 getView 함수가 호출되어 각 표시된 요소를 다시 그려주고 취소 선을 적용해야합니다.

0

항목에 대한 클래스를 정의해야하며, 파업 상태에 대한 부울 필드가 있어야합니다. 예를 들어 : 항목이 어댑터의 getView() 방법을 통해 파업을하면

public class MyItem{ 
    String name; 
    boolean isStriked; 
} 

그런 다음 확인할 수 있습니다. 코드에서 이러한 방식으로 응집력을 높일 수 있습니다. BTW 나는 아이템 삭제를 위해 미리 정의 된 메소드와 애니메이션을 가지고 있으므로 RecyclerView를 사용하는 것이 좋습니다

+0

RecyclerView와 같은 것이 있다는 것을 몰랐습니다. 고맙습니다. 나는 그것에 lok을 가지고있을 것이다. – DIvin93

관련 문제