我有以下问题:
我有一个TableLayout以及几个动态创建的TableRows。
在每一行的右侧,我创建了一个按钮,该按钮应调用另一个活动。
现在我想用intent.putExtra()
传递一些信息。在这种情况下,我想传递行号,这也是行中的第一个信息。
这是当前状态的图片:
这是我在运行时(循环中)创建按钮的方式:
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”并直接启动活动。 什么是解决方案,使这项工作?
答案 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);
}
}
}