2013-01-27 8 views
1

Так что я создал некоторую кнопку. Числа зависят от пользователя (при нажатии кнопки, создания нового).Как удалить/удалить динамически сгенерированную кнопку в Android?

Это, как я сделал это:

RelativeLayout layout = (RelativeLayout) findViewById(R.id.layoutcprompt); 
    RelativeLayout.LayoutParams OBJ = new RelativeLayout.LayoutParams (140,80); 
    if ((commandsi%6)==0) {adjust=adjust+86; commandsi=1;} 
    OBJ.leftMargin =(140*(commandsi-1))+10; 
    OBJ.topMargin =250+adjust; 
    Button command = new Button(this); 
    command.setLayoutParams(OBJ); 
    command.setId(ID); 
    command.setText(edittxt.getText().toString()); 
    edittxt.setText(""); 
    command.setBackgroundResource(R.drawable.costum_button); 
    command.setTextColor(Color.WHITE); 
    command.setTextSize(14); 
    layout.addView(command); 
    command.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      Button b = (Button)view; 
      scommand=b.getText().toString(); 
     } 
    }); 
    command.setVisibility(View.VISIBLE); 

Я хочу удалить/удалить их, но я не знаю, как .... Я дал им уникальный идентификатор, но я до сих пор не знаю, как можно Я удаляю их:/

ответ

3

Я не могу комментировать еще один пост, но с использованием

command = new Button(this) 

может включать в себя неявную Утечку памяти на this! (который может быть Activity). Скорее используйте объект Context. Или удалите хотя бы кнопку.

Тогда, поскольку у вас есть родительский номер Button. Просто удалите его:

ViewGroup layout = (ViewGroup) findViewById(R.id.layoutcprompt); 
View command = layout.findViewById(ID); 
layout.removeView(command); 
+2

Great :) Спасибо, это был один;) Я сделал цикл while, чтобы удалить их, и это работа. Я изменил ваш ответ, потому что сначала нужно отобразить представление на кнопку. – prody

+0

Я отредактировал свой ответ, потому что нет необходимости бросать (кроме родителя ...) –

2

Сделать команду глобальной переменной. Тогда вы можете получить доступ к нему позже, и вызвать command.setVisibility(View.GONE);

Таким образом, в верхней части, из файла класса, вы бы объявить глобальную переменную:

Button command; 

Затем удалить переопределение позже и вместо того, чтобы присвоить глобальный переменная:

command = new Button(this); 

Затем, когда вы хотите, чтобы скрыть его, звоните:

command.setVisibility(View.GONE); 
+0

Этот метод вызова исключения нулевого указателя. Если пользователь хочет создать кнопку 20, и я создаю одну глобальную переменную, и я не называю «новую кнопку (это)»; как я могу достичь своей цели? Мне нужно много кнопки, я не знаю, сколько, и все они с уникальным текстом в нем с уникальным идентификатором. Я могу их создать, но я не знаю, как я могу их удалить ... И метод GONE не очень хорош, потому что после этого я буду делать новые кнопки (числа также зависят от пользователя) – prody

+0

Попробуйте вместо этого назначить их динамический идентификатор. затем найдите представление по id и удалите. Вам нужно будет сохранить идентификаторы в списке. Или просто сохраните определения кнопок глобалов в списке – Doomsknight

+0

Да, я просто сделал это. Я дал им динамические идентификаторы, и я сохранил последнее, так что каждую секунду я знал все ID-ы. Найдите взгляды по идентификаторам и удалите их в цикле и сделайте. – prody

1

Попробуйте использовать документацию, 5 секунд исследования могут привести вас к RemoveView method.

layout.removeView(command); 

Update

Если у вас есть исключения нулевого указателя на этой линии, означает, что ваш layout является нулевым, а не ваш command. Сделайте свой layout переменным глобальным для этого класса.

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

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

command.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      Button b = (Button)view; 
      scommand=b.getText().toString(); 
      layout.removeView(view);  
    } 
    }); 
+0

да я знаю, что я пытался ... NullPointerException, я сделал команду Глобальная переменная: «Button command;» И я сделал эту строку, прежде чем я вызову removeView: «if (command! = Null) layout.removeView (команда);» но все еще nullpointerexception ... – prody

0

Вы также можете сделать это, как это для целей безопасности:

ViewGroup layout = (ViewGroup) command.getParent(); 
if(null!=layout) //for safety only as you are doing onClick 
layout.removeView(command); 
1

одна реализация, которая может помочь другим, которые считают этот поток является то, что вы можете рассмотреть возможность удаления всех дочерних элементов родительского компоновщика. Как только вы получите родителя представления (который я предполагаю, это контейнер макета), вы можете удалить все дочерние элементы.

command.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      ViewGroup vg = (ViewGroup)view.getParent(); 
      vg.removeAllViews(); 
    } 
}); 
0

Вы также можете использовать этот Snipper

Для добавления кнопки

 LinearLayout dynamicview = (LinearLayout)findViewById(R.id.buttonlayout); 
     LinearLayout.LayoutParams lprams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, 
      LinearLayout.LayoutParams.WRAP_CONTENT); 

      Button btn = new Button(this); 
      btn.setId(count); 
      final int id_ = btn.getId(); 
      btn.setText("Capture Image" + id_); 
      btn.setTextColor(Color.WHITE); 
      btn.setBackgroundColor(Color.rgb(70, 80, 90)); 
      dynamicview.addView(btn, lprams); 
      btn = ((Button) findViewById(id_)); 
      btn.setOnClickListener(this); 

Для удаления кнопку

  ViewGroup layout = (ViewGroup) findViewById(R.id.buttonlayout); 
      View command = layout.findViewById(count); 
      layout.removeView(command); 
Смежные вопросы