마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 ListView에서 ItemClick시 삭제질문 ㅠㅠ

0 추천
ListView 전체적인 화면에서는 title들만 보여주고 title 롱클릭시 alertdialog로 삭제하시겠습니까?

를 띄우고 "Yes"를 클릭하면 삭제되는 문제인데요..

그냥 클릭하면 alertDialog에 값 세개가 보여집니다. title과 그 안에 숨겨진 2개의 값. 총 3개의 값이 상세보기로 보여지게 됩니다.

근데 제가 title1 title2 title3 이렇게 되어있는 목록인데 editText로 값을 넣어서 만든거거든요.

title2를 롱클릭하여 삭제하면 title2에 들어있는 모든 값이 사라져야 합니다,  만약 삭제를 하면 title1 title3만 list에 남겠죠.

그래서 title3를 상세보기를 하면 삭제했던 title2의 상세보기가 보여집니다.

position이 문제 인거 같은데 어떻게 해야하는지 도저히 감이 안잡히네요ㅠㅠ...제발 도와주세용

 

------------------- 소스 첨부 ---------------

  int selectedPos = -1;
     
      /**
       * ListView의 item을 길게 클릭했을 경우.
       * 클릭된 item을 삭제한다.
       * @author stargatex
       *
       */
  
      private class ListViewItemLongClickListener implements AdapterView.OnItemLongClickListener
      {
          @Override
          public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id)
          {
              selectedPos = position;
              final AlertDialog.Builder alertDlg_delete = new AlertDialog.Builder(MainActivity.this);
              alertDlg_delete.setTitle("삭제");
              alertDlg_delete.setIcon(android.R.drawable.ic_input_delete);
              alertDlg_delete.setMessage("정말 삭제하시겠습니까?");

             // '예' 버튼이 클릭되면
              alertDlg_delete.setPositiveButton( "Yes", new DialogInterface.OnClickListener(){
                 
      @Override
                   public void onClick( DialogInterface dialog, int which ) {
       // TODO Auto-generated method stub
      
        //ArrayList에서 항목 삭제
        items.remove(selectedPos);
        //선택한 항목표시 없애기
        list.clearChoices();
        //어댑터에 항목이 바뀜을 알리기
        adapter.notifyDataSetChanged();
     
       }
                  
              }); //onclick
             
              // '아니오' 버튼이 클릭되면
              alertDlg_delete.setNegativeButton("No", new DialogInterface.OnClickListener() {
         
         @Override
         public void onClick(DialogInterface dialog, int which) {
          // TODO Auto-generated method stub
           dialog.dismiss();
         }
        });
        alertDlg_delete.show();
        return true;
       }//onItemLongClick
      };//setOnItemLongClickListener
쮸뿌쮸뿌 (2,470 포인트) 님이 2014년 2월 21일 질문

1개의 답변

+1 추천

현재 올려주신 코드로만 봐서는

items.remove(selectedPos); 한 다음에 이것을 adapter에 적용시켜야 할거 같네요

아니면 adapter에서 arraylist 값을 변환 해 주셔야 합니다.

 

노예의집 (23,370 포인트) 님이 2014년 2월 21일 답변
adapter에서 arraylist값을 변환해 준다는게..무슨 말인지 ㅠㅠ..제가 시작한지 이제 3개월차라....ㅠㅠ
items를 adapter에 집어넣어서 구현하셨죠?
근데 코드올려주신거 보면 items에서 remove하고 실제 데이터가 들어가 있는 adapter에는 아무 처리도 안해준 상황입니다..
그래서 변화된 items를 다시 adapter에 적용 시키던지 아니면 adapter내부에서 변환하는 method를 만들던지 해야 합니다.
adapter.notifyDataSetChanged(); 이걸로만은 안된다는 말씀이신거죠?ㅠㅠ 오...정말 감사합니다...
adapter안에 method를 만들고..그 method안에는 position을 받아 remove를 수행하겠죠?
그 후에 notifyDataSetChanged()를 해 주셔야 적용이 됩니다.
아침부터 계속 하고있는데 도저히 감이 안잡히네요..ㅠㅠ...adapter안에 method라..ㅠㅠ
어댑터도 class이니 그안에서 method든 생성자든 다 지지고볶고 할 수 있습니다~ 공부를 좀 더 해보세요~
댓글달아주신대로 공부 좀 더 해봐야겠어요ㅠㅠ~감사합니다!
...