2013-08-14 3 views
1

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

У меня есть TableLayout вместе с несколькими TableRows, которые динамически создаются. В правой части каждой строки я создаю кнопку, которая должна вызвать другое действие. Теперь я хочу передать некоторую информацию с intent.putExtra(). В этом случае я хочу передать номер строки, которая также является первой информацией в строке. Вот картина текущего состояния:

It is within a scroll view, s

Это, как я создаю кнопки во время выполнения (в цикле):

Button b1 = new Button (this, null, android.R.attr.buttonStyleSmall); 
      b1.setId(1000+grButtonId); 
      b1.setText("Request GR"); 
      b1.setLayoutParams(params); 
      b1.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View view) {  
            // Some code, taken out for clarity 
            // See next code snippet 
       } 
      }); 
grButtonId++; 
tr.addView(b1); 

Моя идея до сих пор является использование идентификатор кнопки (конечно), и получите номер строки на значение grButtonId.

Сейчас идет моя проблема, давайте подробно рассмотрим мой onClick метод:

@Override 
public void onClick(View view) {  
// finished is true, as soon as GRRequest has recieved the data 
if(!finished & !dataRequested){ 
    new GRRequest().execute(getIntent().getLongExtra("poNr", 0),(long)view.getId()); 
    b1.setText("Show GR"); 
    Log.d("DataList", detailList.toString()); 
    dataRequested=true; 
} 
else{ 
    if (dataRequested){ 
    b1.setText("Show GR"); 
    } 
Intent intent = new Intent(DataTableCreater.this, GRTableCreater.class); 
        intent.putExtra("lineNr",view.getId()); 
        intent.putExtra("dataList", detailList); 
        startActivity(intent); 

       } 
       } 

Когда я прошу моих данных, кнопку я нажал на получает значение «Показать GR», как и предполагалось. Остальные кнопки остаются на «Request GR», это тоже прекрасно. Но теперь я хочу, чтобы эти кнопки изменились на «Показать GR» при первом нажатии, а во втором - запуск активности. К настоящему времени кнопки переключаются на «Показать GR» и непосредственно запускают действие. Что было бы решением, чтобы сделать эту работу?

ответ

1

Создайте булевский массив clickedOnce[] = new boolean[grButtonId+1] одно поле для каждой кнопки. Тогда у этого есть

public void onClick(View view) {  

    if(!finished){ 
    new GRRequest().execute(getIntent().getLongExtra("poNr", 0),(long)view.getId()); 
    b1.setText("Show GR"); 
    Log.d("DataList", detailList.toString()); 
    clickedOnce[Integer.parseInt(String.valueOf(view.getId()).substring(1,4))]=true; //sets the clickedOnce for this button to true, substring(1,4) is needed to cancle the leading 1 from the id 
        } 
        else{ 
        //Checks, if the button was clicked once   
        if (!clickedOnce[Integer.parseInt(String.valueOf(view.getId()).substring(1,4))]){ 
        b1.setText("Show GR"); 
        clickedOnce[Integer.parseInt(String.valueOf(view.getId()).substring(1,4))]=true; 
        } 
        else{ 
        Intent intent = new Intent(DataTableCreater.this, GRTableCreater.class); 
        intent.putExtra("lineNr",view.getId()); 
        intent.putExtra("dataList", detailList); 

        startActivity(intent); 
        } 
       } 
       } 
Смежные вопросы