2015-12-16 3 views
0

Код:Обработка Нажмите Событие ImageView, которая динамически добавляется

maxIndex = alItemListDetails.size(); 
    linItemTags = (LinearLayout) findViewById(R.id.linItemTags); 
    final ImageView image = new ImageView(this); 
    for (int i = 0; i < maxIndex; i++) { 
     image.setLayoutParams(new android.view.ViewGroup.LayoutParams(80, 60)); 
     image.setMaxHeight(20); 
     image.setMaxWidth(20); 
     image.setTag(i); 
     image.setImageResource(R.drawable.box); 
     // Adds the view to the layout 
     linItemTags.addView(image); 
    } 
    image.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Common.displayToast(ItemDetailsActivity.this, "" + image.getTag()); 
     } 
    }); 

Как из кода выше, вы можете увидеть, что я генерироваться динамически ImageView и пытается справиться нажмите событие этого ImageView.

Но это дает мне ошибки, как показано ниже:

Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 
+0

Вы пытаетесь создать список изображений? –

+0

@vipinagrahari yes –

+0

Использование RecyclerView с ViewHolder было бы лучшим вариантом. –

ответ

2

Вызванный: java.lang.IllegalStateException: Указанный ребенок уже имеет родителя. Сначала необходимо вызвать removeView() родительского элемента ребенка .

Из-за добавления же ImageView объекта image более чем один раз в linItemTags макета.

Создать image объект внутри для цикла:

for (int i = 0; i < maxIndex; i++) { 
     ImageView image = new ImageView(this); //<< create here 
     .... 
     linItemTags.addView(image); 
    } 
2
try this 

maxIndex = alItemListDetails.size(); 
    linItemTags = (LinearLayout) findViewById(R.id.linItemTags); 

    for (int i = 0; i < maxIndex; i++) { 
    ImageView image = new ImageView(this); 
     image.setLayoutParams(new android.view.ViewGroup.LayoutParams(80, 60)); 
     image.setMaxHeight(20); 
     image.setMaxWidth(20); 
     image.setTag(i); 
     image.setImageResource(R.drawable.box); 
     // Adds the view to the layout 
     linItemTags.addView(image); 
     image.setOnClickListener(new ImageClickLIstener(i)); 

    } 

    class ImageClickLIstener implements OnClickListener 
    { 
    int position; 
    ImageClickLIstener() 
    { 
    this.position= position; 
    } 

     @Override 
     public void onClick(View v) { 
      Common.displayToast(ItemDetailsActivity.this, "" + position); 
     } 
    } 
Смежные вопросы