Android 对于以编程方式添加的按钮,单击时会出现不同的错误
我浏览了一些主题,但找不到确切的答案,或者至少找不到正确的答案。代码中的情况是,我为数据库中的每一行创建了一个按钮,每个按钮都应该有一个OnClick,它将我们发送到另一个活动以及一些值(每个按钮应该有不同的值)但最后,似乎我所有的按钮都得到了相同的值,这让我觉得它只为所有按钮创建了一个视图Android 对于以编程方式添加的按钮,单击时会出现不同的错误,android,database,button,onclick,onclicklistener,Android,Database,Button,Onclick,Onclicklistener,我浏览了一些主题,但找不到确切的答案,或者至少找不到正确的答案。代码中的情况是,我为数据库中的每一行创建了一个按钮,每个按钮都应该有一个OnClick,它将我们发送到另一个活动以及一些值(每个按钮应该有不同的值)但最后,似乎我所有的按钮都得到了相同的值,这让我觉得它只为所有按钮创建了一个视图 Cursor przepis = bazaUzytkownikow.rawQuery("SELECT * FROM przepisy", null); int liczba_wierszy = pr
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);
}
Cursor przepis=bazaUzytkownikow.rawQuery(“SELECT*FROM przepis”,null);
int liczba_wierszy=przepis.getCount();
przepis.moveToPosition(0);
对于(int i=0;i<(liczba_wierszy/4)+1;i++){
LinearLayout行=新的LinearLayout(该行);
row.setLayoutParams(新的LayoutParams(LayoutParams.FILL\u父级,LayoutParams.WRAP\u内容));
对于(int j=0;j<4;j++){
if((przepis.moveToPosition((i*4)+j)!=false))
{
nrPrzepisu=(i*4)+j;
按钮btnTag=新按钮(此按钮);
btnTag.setLayoutParams(新的LayoutParams(115,60));
btnTag.setText(przepis.getString(przepis.getColumnIndex(“nazwa”));
btnTag.setTextSize(10);
btnTag.setId(j+1+(i*4));
btnTag.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图t){
//TODO自动生成的方法存根
Intent IdzPrzepis=新Intent(getApplicationContext(),DodajPrzepis.class);
IdzPrzepis.putExtra(“ID_uzytkownika”,ID_uzytkownika);
IdzPrzepis.putExtra(“nr_Przepisu”,nrPrzepisu);
星触觉(IdzPrzepis);
}
});
行。添加视图(btnTag);
}
}
布局。添加视图(行);
}
为了让代码更清晰,bazaUzytkownikow是我的数据库,liczba_wierszy是我得到的行数。我将光标移到开始处,因为它是我想要开始的地方,我继续使用2个循环“剪切”我的数据。我的目标是在一排4个按钮。
我认为不起作用的部分是OnClick方法,我希望我的按钮切换活动并发送nrPrzepisu,这基本上是在我的按钮和数据库中正确的行之间添加连接(在另一个活动中,我想设置文本,从数据库中读取行取决于单击哪个按钮)。
我检查了另一个活动,它似乎每次都在读取相同的nrPrzepisu,这通常等于循环结束时nrPrzepisu=(I*4)+j的最后一个值,这让我觉得我需要为每个按钮创建不同的视图。您将相同的对象传递给每个onClick,然后在下一次迭代中更改该对象。最后,所有onclick都有相同的nrPzepisu对象,它返回的值是本例中最后一个值
int nrPrzepisu = (i*4) + j;
这样,您就不会将同一个对象传递到所有onclick中。我是这方面的新手,但在这之后我添加了一个“final int transfer=nrPrzepisu”。我可以复制到我的意图以及它的工作,谢谢!