2012-07-11 13 views
10

Bir listeden belirli bir satırı silmek istiyorum Bir ImageView tıklandığında görün. Benim liste görünümü şunun gibi görünüyor: enter image description hereremoveView (Göster) AdapterView içinde desteklenmiyor

En son resim tıklatıldığında bu satırı silmek istiyorum.

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; 
     } 
    } 

Bunu kullanarak satırı silin çalıştı: İşte benim adaptör olup

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

ve ben hatayı alıyorum: ERROR AndroidRuntime java.lang.UnsupportedOperationException: removeView(View) is not supported in AdapterView

benim mystake nedir? Herhangi bir fikir?

cevap

20

View ürününü kaldırmanız gerekmiyor, ancak fotoğraf listenizdeki öğeleri kaldırmanız gerekmiyor.

photos.remove(yourPhoto); 
notifyDataSetChanged(); 

Üstelik ViewHolders kullanmanız gereken Google tuts bir çok şey var. Umut, bu size yardımcı olacaktır.

+0

Hayır, ancak yanlış bir şekilde yaptığınızı düşünüyorum. ClickListener'ınızı adaptörünüze değil, aktivitenize (veya parçanıza) yazmamalısınız. Ardından görünümünüz için bir OnItemClickListener ayarladıktan sonra fotoğrafınızı buradan silersiniz. Açık olduğumdan emin değilim, ama [Cyril Mottier'in blogu] 'na bir göz atmalısınız. (Http://android.cyrilmottier.com/?p=525) – AMerle

+0

Böyle bir çözümü denedim (adaptör arraylist'ten verileri kaldırarak) ve sonra ferahlatıcı) ama işe yaramadı. Burada başka bir sorun açıldı: http://stackoverflow.com/questions/38250987/removing-an-item-from-the-dropdown-list-of-a-baseadapter –

1

o anda çalışır böylece UI iş parçacığı üzerinde denemelisiniz:

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

onItemClick (AdapterView ebeveyn, Görünüm görüntüsü, int pozisyonu, uzun id) olarak

parent.removeViewInLayout(view);

kullanmak

parent.removeViewAt(position);