我正在尝试创建动态按钮。单击按钮时,它应转到指定给按钮文本的指定URL。
为了进行测试,我首先尝试获取该ID,如果它相等则会打印i
的值。但每当我点击任何一个按钮,而不是告诉特定的i
值时,它会进入整个循环,并从1到19打印所有i
的值(动态按钮的数量)创建)
在将所有值从1打印到19之后,程序将被强制关闭,并显示Null pointer exception
。
我甚至尝试将处理程序代码放在onCreate()
之外,但我仍然遇到同样的错误。
for ( i = 0; i <itemList.getTitle().size()-1; i++) {
title[i] = new TextView(this);
title[i].setTextColor( -16711936 );
title[i].setTextSize(18);
title[i].setText("Title = "+itemList.getTitle().get(i));
description[i] = new TextView(this);
description[i].setTextColor(-16776961);
description[i].setText("Description = "+itemList.getDescription().get(i)+"......");
more[i]=new Button(this);
more[i].setText(itemList.getLink().get(i));
layout.addView(title[i]);
System.out.println("Title view is set");
layout.addView(description[i]);
//System.out.println("Description view is set");
layout.addView(more[i]);
more[i].setOnClickListener(listener);
}
private OnClickListener listener=new OnClickListener(){
public void onClick(View arg) {
int index = 0;
for (i = 0; i < more.length; i++)
{
if (more[i].getId() == arg.getId())
{
index = i;
System.out.println("Value of i onclick is"+i);
}
}
//System.out.println("Vlaue of I in onclick"+i);
//Uri uri=Uri.parse(itemList.getLink().get(i));
//startActivity(new Intent(Intent.ACTION_VIEW,uri));
//Toast.makeText(getApplicationContext(), "This button is clicked"+i+more[i].getText()+itemList.getLink().get(i),Toast.LENGTH_LONG).show();
}
}
答案 0 :(得分:3)
您可以使用View的setTag()
和getTag()
方法来识别不同的按钮。
for (i = 0; i < itemList.getTitle().size()-1; i++) {
...
more[i].setTag(i); // Use index of itemList as the tag
}
在onClick上:
int index = (Integer)arg.getTag();
答案 1 :(得分:1)
您也可以设置按钮的ID
more[i].setid(i);
答案 2 :(得分:0)
int index = 0;
for (i = 0; i < more.length; i++)
{
if (more[i].getId() == arg.getId())
{
index = i;
System.out.println("Value of i onclick is"+i);
}
}
正如你在这里看到的,我仍然在你的for循环中
将System.out.println("Value of i onclick is"+i);
置于for循环之外,它应该可以正常工作
PS:格式化代码,以这种方式阅读更容易,你会发现像这样的小错误
答案 3 :(得分:0)
我认为这会对你有帮助..
设置按钮标签也像
一样动态more[i].setId(i);
也改变了像
这样的条件 if (more[i].getId() == i) {
index = i;
}
希望这会对你有所帮助......