动态按钮Onclick Listener

时间:2012-03-08 10:42:17

标签: android button

我正在尝试创建动态按钮。单击按钮时,它应转到指定给按钮文本的指定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();
    }
}

4 个答案:

答案 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;
 }

希望这会对你有所帮助......