以编程方式添加按钮的不同点击次数

时间:2014-01-15 17:29:25

标签: android database button onclick onclicklistener

我正在浏览一些主题,但找不到确切的答案,或者至少无法做到正确。在代码中发生的是我为数据库中的每一行创建一个按钮,并且每个按钮应该有一个OnClick,它将我们发送到另一个活动以及一些值(每个按钮应该具有不同的值)但最终似乎我得到了所有按钮的相同值,这让我觉得它只为所有按钮创建了1个视图。

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个循环“剪切”我的数据。我的目标是一排4个按钮。 我认为不起作用的部分是OnClick方法,我希望我的按钮切换活动并发送nrPrzepisu,这基本上是在我的按钮和数据库中的正确行之间添加连接(在我要设置文本的其他活动中,从数据库中读取行取决于您单击的按钮)。 我检查了另一个活动,它似乎每次读取相同的nrPrzepisu,它通常等于nrPrzepisu =(i * 4)+ j的最后一个值,当循环完成时它让我觉得我不知何故需要为每个按钮制作不同的视图。

1 个答案:

答案 0 :(得分:1)

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

int nrPrzepisu = (i*4) + j;

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