2012-07-03 2 views
1

В простой карточной игре, которую я хочу развить, у меня есть три кнопки: button1, button2 и button3. button1 создает два изображения в табло и отображает изображение. Когда нажата кнопка2 и/или кнопка3, она динамически добавляет изображение в табло через сквозной макет. Когда игра закончена, я хочу, чтобы пользователь нажал кнопку1 и начал все сначала. Я могу это сделать, но проблема в том, что изображения, которые были ранее отображены нажатием кнопки2 и кнопки3, также отображаются. Я хочу, чтобы их удаляли при нажатии кнопки1. Как я могу удалить их при нажатии кнопки1? Пожалуйста, помогите мне!Как удалить динамически раздутые представления?

ответ

6

Как и вы, вы можете удалить их. Просто позвоните removeViewAt(int index) или removeView(View view) в родительском контейнере, чтобы удалить нужные вам виды.

В качестве альтернативы, если вы планируете повторно использовать их, вы можете просто установить их видимость на GONE. Тогда вы могли бы вернуть их без расходов на раздувание их снова.

Если вы позволяете надувнику автоматически прикреплять завышенные изображения к родительскому объекту, вам нужно будет отслеживать положение добавленных видов. Вы можете использовать getChildCount для родителя непосредственно перед раздуванием, чтобы найти индекс следующего вида, который будет добавлен.

+0

Thanx Ted. Попробуй это и сообщите, если это сработает! – Nush77

+2

removeView (view) не работал для меня. – usman

+0

@usman - Вы уверены, что представление, которое вы передали в качестве аргумента, на самом деле является прямым дочерним элементом представления, для которого вы назвали 'removeView'? –

2

вы можете использовать ViewGroup.removeView(View v);

что-то вроде этого:

tblRow.removeView(button2); 
+0

Я сделал это, но он не добавляет изображение, когда я нажимаю кнопку1. Я просто хочу удалить образы изображений, которые отображаются на развороте макета. И я не хочу удалить кнопку! Я хочу удалить imageViews. – Nush77

+0

, затем передайте removeView() ссылку на ImageView, которую вы хотите удалить, а не кнопку. Если вы отредактируете свой вопрос и опубликуете какой-то код, который вы используете, нам будет намного легче дать вам конкретное решение. Как сейчас сейчас сложно сказать, что происходит в вашей программе на основе того, что вы опубликовали. – FoamyGuy

0

вот как я добавляю затем удалить View 5 секунд (в другом контексте)

final LinearLayout linearLayout = context.getResources().getLayout(R.layout.activity_main) 
    LayoutInflater inflater = LayoutInflater.from(linearLayout.getContext()); 
    final View details = inflater.inflate(R.layout.extra_details, linearLayout, false); 
    linearLayout.addView(details); 

    new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        if (linearLayout.findViewById(R.id.extra_details) != null){ 
         linearLayout.removeView(details); 
        } 
       } 
      }, 5000); 

то же использование сценарий находится в контексте onClickListener. Узнать больше здесь https://www.bignerdranch.com/blog/understanding-androids-layoutinflater-inflate/

Смежные вопросы