2016-01-07 5 views
0

У меня возникла проблема в создании правильного OnClicklistener для кнопок, которые я генерирую во время выполнения. Я нашел несколько потоков здесь в stackoverflow, но после многих попыток я не получаю его работу.Кнопка OnClicklistener из динамически размножаемых кнопок

У меня есть метод с построением графического интерфейса с TextView в левом столбце и в правой колонке «x». У каждой кнопки есть другая ссылка, которая должна быть открыта onClick. Я не знаю ссылку до ее создания во время выполнения.

Здесь мой код с моей помощью. Но в этом случае я получаю каждый раз только ссылку последней сгенерированной кнопки. Если я нажму первый, второй, то ... каждый раз по одной и той же ссылке.

Надеюсь, что есть решение!

private void createNewView (String JsonInputBeacon, String JsonInputConfig){ 

    TableLayout tableLayout = new TableLayout(this); 
    tableLayout.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.MATCH_PARENT)); 
    tableLayout.setStretchAllColumns(true); 

    try { 
     final JSONArray jsonArrayBeacon = new JSONArray(JsonInputBeacon); 
     final JSONArray jsonArrayConfig = new JSONArray(JsonInputConfig); 


     int Patientencounter = 1; 

     for(int JsonObjectCounterBeacon = 0; JsonObjectCounterBeacon < jsonArrayBeacon.length(); JsonObjectCounterBeacon ++){ 
      final JSONObject objectBeacon = jsonArrayBeacon.getJSONObject(JsonObjectCounterBeacon); 

      TableRow row = new TableRow(this); 
      TextView outputLeft = new TextView(this); 
      outputLeft.setText("Patient " + Patientencounter + ":\n" + "Name: " + objectBeacon.getString("surname") + ", " + objectBeacon.getString("firstName") + "\n" + "Geb-Datum: " + objectBeacon.getString("birthdate")); 

      row.addView(outputLeft); 

      for (int JsonObjectCounterConfig = 0; JsonObjectCounterConfig < jsonArrayConfig.length(); JsonObjectCounterConfig++){ 
       final JSONObject objectConfig = jsonArrayConfig.getJSONObject(JsonObjectCounterConfig); 

       TableRow rowRight = new TableRow(this); 
       Button buttonRight = new Button(getApplicationContext()); 
       buttonRight.setText(objectConfig.getString("name")); 
       final String myURL = objectConfig.getString("link"); 

       buttonRight.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         Intent browserIntent = new Intent(Intent.ACTION_VIEW,Uri.parse(myURL)); 
         startActivity(browserIntent); 
        } 
       }); 

       rowRight.addView(buttonRight); 
       row.addView(rowRight); 
      } 

      tableLayout.addView(row); 

      Patientencounter +=1; 
     } 

    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    setContentView(tableLayout); 
} 

ответ

1

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

Поскольку myURL содержит значение, которое присваивается на последней итерации for-loop.

Используйте setTag/getTag способ buttonRight чтобы получить адрес в соответствии с Button нажмите. как:

Установить значение с помощью setTag:

final String myURL = objectConfig.getString("link"); 
buttonRight.setTag(myURL); 

и получить myURL значение, используя v параметр onClick метода:

Intent browserIntent = new Intent(Intent.ACTION_VIEW, 
           Uri.parse(v.getTag().toString())); 
+0

Это решение. Он отлично работает !!! Спасибо за быстрый ответ! Я пробовал это с часами ... – AndroidNewbee

0

Установите тег вашей кнопки, чтобы быть URI, затем получить доступ к тег из представления, переданного в ваш метод onclick.

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