2012-03-08 123 views
0

我正在嘗試創建動態按鈕。當點擊一個按鈕時,它應該轉到指定給該按鈕文本的指定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(); 
    } 
} 

回答

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:格式化你的代碼,它更容易閱讀的方式,你會更容易發現小錯誤,類似於這些

+0

的ID Thanks.But還在說空指針異常,沒有打印任何I值 – 2012-03-08 17:28:01

+0

你能更新您的文章完整的錯誤日誌和完整的代碼? – Andreas 2012-03-09 07:20:44

3

您可以使用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

0

我認爲這將幫助你..

設置按鈕標籤也喜歡動感

more[i].setId(i); 

也改變條件像

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

希望這將幫助你......

+0

感謝文本,這是工作,現在我應該得到按鈕的文本 – 2012-03-08 18:13:33

1

您還可以設置按鈕

more[i].setid(i);