我知道这个主题听起来像是一个复杂的,但我不是试图在这里调试这个问题,而是为了解决这个问题。
我的程序应该做的是: 对于文件夹中的每个文件,创建一个新按钮。如果您单击此按钮,请在意图中添加您刚刚输入的文件夹的名称。
0 0
340 17
580 29
700 35
900 45
1200 60
1420 71
1600 80
1800 90
2020 101
2200 110
2340 117
2520 126
2620 131
2820 141
3000 150
3220 161
3360 168
现在我遇到的问题是" fileName"由于Java给出了对象的指针而不是值本身,因此需要将变量置于最终。但是,如果我这样做,则只会为任何按钮发送最后选择的fileName。
答案 0 :(得分:2)
无需声明fileName
final
。
因为您要将fileName
设置为按钮的文本。因此,使用getText
使用v
参数onClick
来获取Button click.like上的文件名。
...
intent.putExtra("fileExtension",((Buttton)v).getText().toString());
...
或者您也可以使用setTag()/getTag()
按钮的button
方法来执行此操作。
答案 1 :(得分:2)
你可以继续进行fileName
决赛。我知道你认为这会导致问题,但事实并非如此。
由于Java提供了对象的指针而不是值本身,因此需要将“fileName”变量置于最终中。但是,如果我这样做,则只会为任何按钮发送最后选择的fileName。
在循环的每次迭代中,您将声明一个不同的String
实例。每一个都是最终的,但它们不会在循环迭代中“共享”。
我创建了一个小应用程序,它迭代了String
个数组,执行与您的代码非常相似的操作。尽管我将String
声明为final
,但当我点击它时,每个按钮仍会提供不同的名称。
for (int i = 0; i < names.length; i++) {
final String name = names[i];
Button button = new Button(this);
button.setText(name);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, name, Toast.LENGTH_SHORT).show();
}
});
root.addView(button);
}