将参数传递给for循环中的onClick事件的想法

时间:2013-12-10 17:54:11

标签: android parameter-passing onclicklistener

我正在搜索如何将删除按钮添加到我的应用程序中,并从函数中的代码中接收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,就像现在一样,只是在一个警告对话框中。但是我遇到的问题是separate_entries [6]总是包含最后一个ID,而不是与当前条目匹配的ID,因此该按钮显示所有项目具有相同的id。是否可以将id传递给OnClickListener函数并且它可以工作吗?如果是的话,我该怎么做?

2 个答案:

答案 0 :(得分:1)

尝试更改此行

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

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

答案 1 :(得分:1)

看起来每行有一个删除按钮?

如果是这样,最简单的方法可能是将每个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,并在所有删除按钮中共享它。