好的,所以我有一个buttonarray,我都使用for循环进行实例化。每个按钮都有一个ID以及一个onclicklistener。 onclicklistener将打开一个新的意图(所有按钮都相同的新活动),并且根据所按下按钮的ID,新活动应显示某个pdf文件。
问题是我数组中的最后一个数字被解析为新的意图。因此,所有按钮都具有相同的ID,而不是从0增加到45。
Sheetmusiclist.java(主要活动):
Button sheetsButtons[];
int id;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sheetsmusiclist);
sheetsButtons = new Button[46];
for(int i=0;i<46;i++){
id = i;
sheetsButtons[i] = new Button(this);
sheetsButtons[i].setId(i);
View.OnClickListener mThisButtonListener = new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(SheetMusicList.this, SheetMusic.class);
intent.putExtra("id", id);
startActivity(intent);}};
sheetsButtons[i].setOnClickListener(mThisButtonListener);
}}
然后在下一个活动(Sheetmusic.java)中,我想起意图并获取ID。然后根据ID显示一个pdf文件。但是在所有情况下,都显示了数组中的最后一个ID:45。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sheetmusic);
Intent intent = getIntent();
Bundle bd = intent.getExtras();
if(bd != null){
id = (int) bd.get("id"); //ID here is always 45
}
//a switch here with id -> pdf file name
有人知道吗?
答案 0 :(得分:0)
使用intent.putExtra("id", v.getId());
代替intent.putExtra("id", id);
。
此刻,您正在将 id 变量保存为该类的全局变量,并为其分配一个 i 。完成所有Button
的创建后,当您单击Button
时,您的 id 变量将保留为{{1}中的最后一个 i }循环,这就是为什么您总是在意图中获得“最后一个”元素的原因。
通过使用for
来完成操作,您将获得clicked Button的ID,您在创建过程中会将其分配为 i ,因此{的所有 ids {1}}不同。
希望这会有所帮助。祝你好运:)