android - 以编程方式添加的按钮的不同点击

标签 android database button onclick onclicklistener

我正在浏览一些主题,但找不到确切的答案,或者至少找不到正确的答案。代码中发生的事情是我为数据库中的每一行创建一个按钮,每个按钮都应该有一个 OnClick 将我们发送到另一个 Activity 以及一些值(每个按钮应该有不同的值)但最后似乎我的所有按钮都获得了相同的值,这让我认为它只为所有按钮创建了 1 个 View 。

Cursor przepis = bazaUzytkownikow.rawQuery("SELECT * FROM przepisy", null);
    int liczba_wierszy = przepis.getCount();
    przepis.moveToPosition(0);

    for (int i = 0; i < (liczba_wierszy/4)+1; i++) {
        LinearLayout row = new LinearLayout(this);
        row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
        for (int j = 0; j < 4; j++) {


            if((przepis.moveToPosition((i*4)+j)!=false))
            {
                nrPrzepisu=(i*4)+j;
            Button btnTag = new Button(this);
            btnTag.setLayoutParams(new LayoutParams(115, 60));
            btnTag.setText(przepis.getString(przepis.getColumnIndex("nazwa")));
            btnTag.setTextSize(10);
            btnTag.setId(j + 1 + (i * 4));


            btnTag.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View t) {
                    // TODO Auto-generated method stub
                    Intent IdzPrzepis = new Intent(getApplicationContext(), DodajPrzepis.class);
                    IdzPrzepis.putExtra("ID_uzytkownika", ID_uzytkownika);
                    IdzPrzepis.putExtra("nr_Przepisu", nrPrzepisu);
                    startActivity(IdzPrzepis);
                }
            });
            row.addView(btnTag);
            }
        }

       layout.addView(row);
    }

为了让代码更清晰 - bazaUzytkownikow 是我的数据库,liczba_wierszy 是我得到的行数。我将光标移到开头,因为它是我想要开始的地方,然后我继续使用 2 个循环“剪切”我的数据。我的目标是 1 行中有 4 个按钮。 我认为不起作用的部分是 OnClick 方法,我希望我的按钮切换 Activity 并发送 nrPrzepisu,这基本上是在我的按钮和数据库中的适当行之间添加连接(在其他 Activity 中我想设置文本,从数据库中读取行取决于您单击哪个按钮)。 我检查了其他 Activity ,它似乎每次都在读取相同的 nrPrzepisu,这通常等于循环结束时 nrPrzepisu=(i*4)+j 的最后一个值,这让我觉得我需要以某种方式为每个按钮制作不同的 View 。

最佳答案

您将同一个对象传递给每个 onClick,然后在下一次迭代中更改该对象。最后,所有的 onClicks 都有相同的 nrPzepisu 对象,它返回的值就是这个例子中的最后一个值。

int nrPrzepisu = (i*4) + j;

这样您就不会将同一个对象传递给所有的 onClicks。

关于android - 以编程方式添加的按钮的不同点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21144270/

相关文章:

android - 创建 flutter 的深层链接时显示此错误

带有选项卡的 Android Actionbar Sherlock

android - 在 kotlin 中写入 parcer 可空值

c++ - 如何使用 SOCI 库将变量绑定(bind)到准备好的语句?

database - 如何在一个数据库字段中插入多个条目

javascript - 跨浏览器样式 "choose file"按钮

javascript & html - 每次用户在文本框中输入项目时创建新的复选框选项

java - 从 Android 插件调用 Unity 中的场景

mysql - 创建上周第一类 worker 的表

用于 chrome 但不适用于 safari 的按钮的 CSS