2017-02-09 5 views
-4

In meiner App zu entfernen, wähle ich Fotos aus der Galerie und fügen Sie sie innerhalb von LinearLayout programmatisch, also tat ich dies:Wie ein Image innerhalb von Linearlayout

<LinearLayout 
      android:orientation="horizontal" 
      android:id="@+id/linearImages" 
      android:layout_width="wrap_content" 
      android:layout_height="150dp"> 
      <Button 
       android:layout_gravity="center" 
       android:id="@+id/add_btn" 
       android:gravity="center" 
       android:drawableLeft="@drawable/add_icon" 
       android:layout_marginLeft="10dp" 
       android:layout_marginStart="10dp" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" /> 
     </LinearLayout> 

und ich bin einen Tag auf dem Foto dass ich stelle:

public void AddNewImages(Context context,Bitmap bitmap){ 
    ImageView img = new ImageView(context); 
    img.setScaleType(ImageView.ScaleType.FIT_XY); 
    img.setImageBitmap(bitmap); 
    img.setTag(tagCount); 
    linearImages.addView(img); 
    bitmapArray.add(bitmap); 
    tagCount++; 
} 

Und ich möchte ein Bild durch Antippen entfernen, wie ich schon sagte, werden die Bilder programmatisch hinzugefügt, so brauche ich etwas Bilder eins nach dem anderen zu entfernen, ohne eine statische Bildposition haben .

+0

Dieser Link http://stackoverflow.com/questions/3995215/add-and-remove-views-in-android-dynamically – Randroid

Antwort

4

Ich würde vorschlagen, RecyclerView instaed LinearLayout zu verwenden. Der Grund dafür ist, dass Sie leicht auf die Position des Objekts klicken können und entsprechend entfernen können. Wenn Sie mit Ihrer eigenen Lösung gehen möchten, würde ich vorschlagen, setOclickListener auf jedem ImageView hinzuzufügen, die hinzugefügt werden. Im Listener nach dem Klick-Ereignis erhalten Sie die imagView.getTag(), die die Position der Bildansicht innerhalb LinearLayout ist. Anschließend können Sie die Bildansicht von der LinearLayout entfernen, indem Sie mit:

ll.removeViewAt(position);// to remove view from particular position 

Oder wenn Sie ImageView angeklickt direkt dann entfernen möchten:

ll.removeView(view)// to remove particular view 
1

Aktualisieren Sie Ihren Code von AddNewImages wird es funktionieren.

public void AddNewImages(Context context,Bitmap bitmap){ 
     ImageView img = new ImageView(context); 
     img.setScaleType(ImageView.ScaleType.FIT_XY); 
     img.setImageBitmap(bitmap); 
     img.setTag(tagCount); 
     linearImages.addView(img); 
     bitmapArray.add(bitmap); 
     tagCount++; 
     img.setOnClickListener(clickListner); 
     View.OnClickListener clickListner=new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       linearImages.removeView(v); 
      } 
     }; 
    } 
+0

Also das 'Image img = (Image) v hilfreich sein können;' würde für was? –

+0

Es ist nicht erforderlich. Sie können linearImages.removeView (v) direkt aufrufen. –

+0

Es funktioniert, an der ersten Stelle, aber wenn ich versuche, erneut hinzuzufügen, habe ich diese Ausnahme "Das angegebene Kind hat bereits ein Elternteil. Sie müssen removeView() zuerst auf der Eltern des Kindes aufrufen." –

Verwandte Themen