gpt4 book ai didi

java - 通过intent解析onclicklistener中的变量数据

转载 作者:太空宇宙 更新时间:2023-11-04 10:16:54 25 4
gpt4 key购买 nike

好吧,我有一个按钮数组,我用 for 循环实例化它。每个按钮都有一个 ID 以及一个 onclicklistener。 onclicklistener 打开一个新 Intent (所有按钮都相同的新 Activity ),并且根据按下的按钮的 ID,新 Activity 应该显示某个 pdf 文件。

问题是数组中的最后一个数字被解析为新 Intent 。因此所有按钮都会获得相同的 ID,而不是从 0 增加到 45。

Sheetmusiclist.java(主要 Activity ):

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);
}}

然后在下一个 Activity (Sheetmusic.java) 中,我记忆起 Intent 并获取 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

有人有想法吗?

最佳答案

使用 intent.putExtra("id", v.getId()); 而不是 intent.putExtra("id", id);

目前,您正在将 id 变量保存为该类的全局变量,并为其分配一个 i。完成所有 Button 创建后,当您单击 Button 时,您的 id 变量仍然是 for 循环中的最后一个 i,这就是为什么您总是在 Intent 中获得“最后”元素。

通过使用 v.getId(); 执行此操作,您可以获得单击的按钮的 id,在创建过程中将其分配为 i,因此 Button 的所有 id 都是不同的。

<小时/>

希望这有帮助。祝你好运:)

关于java - 通过intent解析onclicklistener中的变量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51598336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com