2012-07-11 1 views
10

ImageView를 클릭하면 listView에서 특정 행을 삭제하려고합니다. 내 목록보기는 다음과 같습니다. enter image description hereAdapterView에서 removeView (View)가 지원되지 않습니다.

마지막 이미지를 클릭하여 해당 행을 삭제할 때 원합니다.

public class UserItemAdapter extends ArrayAdapter<Photos.Record> { 
     private ArrayList<Photos.Record> photos; 

     public UserItemAdapter(Context context, int textViewResourceId, ArrayList<Photos.Record> photos) { 
      super(context, textViewResourceId, photos); 
      this.photos = photos; 
     } 

     @Override 
     public View getView(final int position, View convertView, ViewGroup parent) { 
      View v = convertView; 


      if (v == null) { 
       LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       v = vi.inflate(R.layout.photorowlist, null); 
           v.setClickable(true); 
           v.setFocusable(true); 
      } 

      Photos.Record user = photos.get(position); 
      if (user != null) { 
       TextView photo_name = (TextView) v.findViewById(R.id.photoname); 

       if (photo_name != null) { 
        photo_name.setText(user.photo_name); 
       } 

      } 
         v.setOnClickListener(new OnClickListener() { 

         @Override 
         public void onClick(View view) { 
          //Toast.makeText(view.getContext(), "Clicked", Toast.LENGTH_SHORT).show(); 

          ImageView delete_photo = (ImageView) view.findViewById(R.id.deletephoto); 
          delete_photo.setOnClickListener(new OnClickListener(){ 
          @Override 
          public void onClick(View v) { 
           Toast.makeText(Photos.this, "Delete Button Clicked", Toast.LENGTH_SHORT).show(); 
           listView.removeView(v); 
           myadapter.notifyDataSetChanged(); 


       }}); 
         } 

         }); 


      return v; 
     } 
    } 

    public class Record { 
     public String photo_name; 

     public Record(String photo_name) { 
      this.photo_name = photo_name; 
     } 
    } 

내가 이것을 사용하여 행 삭제하려고했습니다 : : 여기 내 어댑터입니다

listView.removeView(v); 
myadapter.notifyDataSetChanged(); 

와 나는 오류 얻을 : ERROR AndroidRuntime java.lang.UnsupportedOperationException: removeView(View) is not supported in AdapterView

내 mystake이를? 어떤 생각?

답변

20

View을 제거 할 필요는 없지만 사진 목록에서 항목을 제거하십시오.

photos.remove(yourPhoto); 
notifyDataSetChanged(); 

또한, 당신이 ViewHolders를 사용해야합니다, 구글에서 tuts 많이 있습니다. 희망이 도움이 될 것입니다.

+0

아니요,하지만 저는 잘못된 길을 가고 있다고 생각합니다. 귀하의 어댑터에 귀하의 활동 (또는 조각)에 귀하의 ClickListener를 작성해서는 안됩니다. 그런 다음보기에 대해 OnItemClickListener를 설정하고 여기에서 사진을 삭제하십시오. 나는 분명하지 않다.하지만 [Cyril Mottier의 블로그] (http://android.cyrilmottier.com/?p=525)를보아야한다. – AMerle

+0

나는 어댑터와 같은 데이터를 제거하려고 시도했다. 그리고 새로 고침) 그러나 작동하지 않았다. 여기에 다른 문제가 열렸습니다. http://stackoverflow.com/questions/38250987/removing-an-item-from-the-dropdown-list-of-a-baseadapter –

1

가 즉시 작동하도록 당신은 UI 스레드에서 그것을 시도해야합니다

 listView.remove(position); 
     runOnUiThread(new Runnable() { 
      public void run() { 
       adapter.notifyDataSetChanged(); 
      } 
     }); 
9

onItemClick (어댑터 뷰 AdapterView 부모,보기보기, INT 위치, 긴 ID)에

parent.removeViewInLayout(view);

를 사용

parent.removeViewAt(position);