TableLayout,不同的Button操作取决于TableRow中的数据

时间:2013-08-14 11:09:40

标签: android

我有以下问题:

我有一个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);

到目前为止,我的想法是使用按钮的ID(当然),并使用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”,如预期的那样。其他按钮保持“请求GR”,这也没关系。但是现在我希望这些按钮在第一次点击时更改为“显示GR”并在第二次点击时启动活动。 到现在为止,按钮变为“显示GR”并直接启动活动。 什么是解决方案,使这项工作?

1 个答案:

答案 0 :(得分:1)

为每个Button创建一个布尔数组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);
                    }
                }
              }