2015-02-09 3 views
0

Я пытаюсь, чтобы пользователи нажали кнопку, и создаст новую кнопку (button1), и с этой кнопки1 они перейдут на другую деятельность, и вы сможете создайте более одного. И после этого активность будет завершена, чтобы вернуться к активности, которая запустила эту кнопку. До сих пор мне удалось сделать это с помощью этого кода:Как создать несколько кнопок динамически и обрабатывать каждый отдельно.

new_question = (Button)findViewById(R.id.new_question); 
    new_question.setOnClickListener(onClick()); 

private OnClickListener onClick() { 
    return new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      mLayout.addView(createNewTextView()); 

      Button.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 

       Intent myIntent = new Intent(getBaseContext(), Question.class); 
       startActivity(myIntent); 
       return; 

       } 

      }); 

     } 
    }; 
} 

TextView createNewTextView() { 
    final RelativeLayout.LayoutParams lparams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 
    Button = new Button(this); 
    lparams.addRule(RelativeLayout.ABOVE, R.id.linearLayout2); 
    Button.setLayoutParams(lparams); 
    Button.setText("New Question");  
    return Button; 
} 

Моей первой проблемы, это, что я не знаю, как обращаться с каждой кнопкой по-разному, потому что я только создать. С одной стороны, я не хочу создавать их заранее в XML-файле, они должны быть программными с помощью класса java.

И во-вторых, после того, как каждая кнопка создана, чтобы увидеть их после. Потому что после того, как кнопка создана, и я перехожу к следующему действию, а затем возвращаюсь (не с помощью кнопки «Назад», а с помощью намерения) кнопок там нет.

Любые советы?

ответ

0

просто дать каждой кнопки tag, и назначить их все же onClickListener какие тесты, Что это кнопка тег, а затем сделать надлежащие меры в соответствии с этим:

mButton.setTag(i); 
i++; 
mButton.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        int but_id = Integer.parseInt(v.getTag().toString().trim()); 
        if(but_id == 1){ 
         // Do Something 
        }else if(but_id == 2){ 
         // Do Another Something 
        } 
       } 

      }); 

ОБНОВЛЕНИЕ:

Тег точно так же, как ярлык, который вы указываете на просмотр, чтобы ссылаться на него в будущем, поэтому, когда вы указываете кнопкам разные теги, вы, как и их идентификаторы, смотрите here для получения дополнительной информации.

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

  1. Воссоздать их.
  2. Передайте им намерение при переходе от активности и передайте их снова на намерение активности при повторном действии, а затем используйте данные, переданные для их воссоздания.
  3. Просто определите их как переменные static и, вернувшись к ней, добавьте их в соответствующий родитель, который находится в макете действия.
+0

Не могли бы вы объяснить мне, как работает тег? также они будут там после того, как я вернусь к этой деятельности? – pap

+0

@pap любезно посмотрите мои обновления, спасибо –

+0

Как я могу сделать третий вариант? – pap

0

Во-первых, можно добавить следующее:

// This maps the tag of your button to an Intent to launch a new Activity 
private final Map<String,Intent> map = new HashMap<String,Intent>(); 
// A global listener for your buttons 
private final View.OnClickListener listener = new View.OnClickListener(){ 
    @Override 
    public void onClick(View v){ 
     String tag = (String) v.getTag(); 
     Intent i = map.get(tag); 
     try{ 
      startActivity(i); 
     }catch(ActivityNotFoundException e){ 
      // Log your exception 
     } 
    } 
}; 

Тогда это:

// This is the method where you create a new button 
void createNewButton(String tag,Intent i){ 
    Button button = new Button(this); 
    // blah blah for adding it programatically to the layout 
    button.setTag(tag); 
    // add the intent for starting the Activity associated 
    // with this Button to the Map 
    map.put(tag,intent); 
    // add the listener 
    button.setOnClickListener(listener); 
} 

я добавил достаточно комментариев, чтобы сделать код разъяснений.

Если вы могли бы сделать это с помощью тега Long, то вы можете использовать SparseArray и сэкономить дополнительную память, используя HashMap.

+0

Я не понимал тег String. Я имею в виду, какую строку нужно вызвать. – pap

+0

@pap Это строка, которая однозначно идентифицирует каждую кнопку.Вы должны придумать эту строку :) –

+0

Я пробовал ваш код, но кнопка не появляется. На самом деле я немного смущен тем, как его использовать. Можете ли вы дать мне несколько объяснений? например, если кнопки будут там, когда я снова перейду на это действие. – pap