【问题标题】:ideas to pass a param to a onClickEvent in a for loop在 for 循环中将参数传递给 onClick 事件的想法
【发布时间】:2013-12-10 17:54:11
【问题描述】:

我正在寻找如何将删除按钮添加到我的应用程序中,并从函数中的代码中接收一个 id。

for (int i = 0; i < separated_rows.length; i++) {
separated_entries = separated_rows[i].split("<cut>");
Button btnDelete = new Button(getBaseContext());
                            btnDelete.setText("Löschen");
                            btnDelete.setOnClickListener(new OnClickListener() {
                                    public void onClick(View v) {
                                        AlertDialog.Builder helpBuilder = new AlertDialog.Builder(MainScreen.this);
                                         helpBuilder.setTitle("Id");
                                         helpBuilder.setMessage("Id: " + separated_entries[6]);
                                         helpBuilder.setNeutralButton("OK", new DialogInterface.OnClickListener() {

                                              @Override
                                              public void onClick(DialogInterface dialog, int which) {
                                                  //do nothing
                                              }
                                             });
                                         AlertDialog helpDialog = helpBuilder.create();
                                         helpDialog.show();
                                    }
                            });
                            rowOptions.addView(btnDelete);
                            table.addView(rowOptions,new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

separated_entries[6] 包含我想要显示的 id,到目前为止,就在警报对话框中。但是我遇到了问题,separated_entries[6] 始终包含最后一个 ID,而不是与当前条目匹配的 ID,因此按钮为所有项目显示相同的 ID。是否可以将 id 传递给 OnClickListener 函数,它会工作吗?如果是,我该怎么做?

【问题讨论】:

  • 这些答案有帮助吗?

标签: android parameter-passing onclicklistener


【解决方案1】:

尝试改变这一行

helpBuilder.setMessage("Id: " + separated_entries[6]);

helpBuilder.setMessage("Id: " + separated_entries[i]);

【讨论】:

    【解决方案2】:

    好像每行都有一个删除按钮?

    如果是这样,最简单的做法可能是将每个 btnDelete 的标签设置为您要删除的项目的 id。创建按钮后:

    Button btnDelete = new Button(getBaseContext());
    btnDelete.setTag(Integer.valueOf(someId);
    ...
    

    然后在 onClickListener 中,您可以轻松检索该 ID:

    public void onClick(View v) {
      int theIdSetAbove = (Integer)v.getTag();
      ...
    

    此外,这应该允许您创建一个 OnClickListener,并在所有删除按钮之间共享它。

    【讨论】:

      猜你喜欢
      • 2018-05-24
      • 1970-01-01
      • 2012-04-26
      • 2011-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      相关资源
      最近更新 更多