1

我有以下问题:

我有一个 TableLayout 以及几个动态创建的 TableRows。在每一行的右侧,我创建了一个按钮,它应该调用另一个活动。现在我想通过intent.putExtra(). 在这种情况下,我想传递行号,这也是行中的第一个信息。这是当前状态的图片:

它在滚动视图中,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);

                }
              }

当我请求我的数据时,我点击的按钮会按预期设置为 "Show GR" 。其他按钮保持在“Request GR”上,这也很好。但是现在我希望这些按钮在第一次点击时更改为“显示 GR”,然后在第二次点击时开始活动。至此,按钮变为“Show GR”并直接启动活动。什么是解决方案,使这项工作?

4

1 回答 1

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);
                    }
                }
              }
于 2013-08-14T11:09:39.517 回答