动态按钮Onclick监听器

问题描述:

我正在尝试创建动态按钮。当点击一个按钮时,它应该转到指定给该按钮文本的指定url。动态按钮Onclick监听器

对于测试,首先尝试获取该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(); 
    } 
} 

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:格式化你的代码,它更容易阅读的方式,你会更容易发现小错误,类似于这些

+0

的ID Thanks.But还在说空指针异常,没有打印任何I值 – 2012-03-08 17:28:01

+0

你能更新您的文章完整的错误日志和完整的代码? – Andreas 2012-03-09 07:20:44

您可以使用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(); 
+0

非常感谢,它打印索引的值。 – 2012-03-08 17:35:20

+0

能否请你帮我得到那个按钮的文字,因为arg.settext不是working.Is有任何其他方式,来获取点击的按钮文本 – 2012-03-08 17:37:09

+0

非常感谢,我从按钮 – 2012-03-08 18:32:49

我认为这将帮助你..

设置按钮标签也喜欢动感

more[i].setId(i); 

也改变条件像

if (more[i].getId() == i) { 
    index = i; 
} 

希望这将帮助你......

+0

感谢文本,这是工作,现在我应该得到按钮的文本 – 2012-03-08 18:13:33

您还可以设置按钮

more[i].setid(i);