通过意图解析onclicklistener中的变量数据

时间:2018-07-30 16:21:23

标签: java android

好的,所以我有一个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

有人知道吗?

1 个答案:

答案 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}}不同。


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