2012-01-18 73 views
0

任何人都可以請指導我如何setOnClickListener動態生成的TextViews。 我的應用程序中有幾個按鈕。現在當單擊某個特定按鈕時,將根據返回的元素數量從數據庫中檢索某些特定文本元素,以生成相應的TextView以顯示檢索到的文本元素。 現在我遇到的問題是,我不知道如何爲動態生成的TextView設置onClickListner。以下是我創建TextView的代碼片段。請指導我該怎麼做.thank你如何爲onClickListener設置動態生成的textviews?

public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.imageButton1: 
catagory = "General"; 
      IndependentDB genData = IndependentDB.getInstance(); 
      genData.open(this); 
      ArrayList<TextHolder> genList = new ArrayList<TextHolder>(); 
      genList = genData.getAllTextFromGenT(); 
      genData.close(); 
      x = genList.size(); 
      String xstr = new StringBuilder().append(x).toString(); 
      System.out.println(xstr); 
      mainText = new TextView[x]; 
      textLayout = new LinearLayout[x]; 
      llseperator = new LinearLayout[x]; 
      textLayoutContainer 
        .setBackgroundResource(R.color.dark_navy_blue); 
      if (!genList.isEmpty()) { 
       for (int i = 0; i < x; i++) { 
        TextHolder firstOne = genList.get(i); 
        String text = firstOne.getText(); 
        mainText[i] = new TextView(this); 
        mainText[i].setId(i); 
        mainText[i].setText("Text"); 
        mainText[i].setLayoutParams(new LayoutParams(
          LayoutParams.WRAP_CONTENT, 
          LayoutParams.WRAP_CONTENT)); 
        mainText[i].setTextSize(25); 
        mainText[i].setGravity(Gravity.CENTER); 
        mainText[i].setText(text); 
        mainText[i].setTextColor(0xFFFFFFFF); 
        mainText[i].setClickable(true); 
        mainText[i].setOnClickListener(this); 
        llseperator[i] = new LinearLayout(this); 
        llseperator[i].setId(i); 
        llseperator[i].setLayoutParams(new LayoutParams(
          LayoutParams.FILL_PARENT, 
          LayoutParams.WRAP_CONTENT)); 
        llseperator[i].setGravity(Gravity.CENTER); 
        llseperator[i] 
          .setBackgroundResource(R.drawable.tv_seperator); 

        textLayout[i] = new LinearLayout(this); 
        textLayout[i].setId(i); 
        textLayout[i].setLayoutParams(new LayoutParams(
          LayoutParams.FILL_PARENT, 
          LayoutParams.WRAP_CONTENT)); 
        textLayout[i].setGravity(Gravity.CENTER); 
        textLayout[i].addView(mainText[i]); 
        textLayoutContainer.addView(textLayout[i]); 
        textLayoutContainer.addView(llseperator[i]); 
       }// End of for 
       }// End of If 
     break;} 

回答

0

你已經在Activity類(實現View.setOnClickListener)onClick()方法,所以我建議你創建一個實現View.setOnClickListener接口來處理的TextView的點擊一個新的類。

嘗試,

class TextClick implements View.setOnClickListener { 
    @Override 
    public void onClick(View view) { 
    TextView tx=(TextView) view; 
    ... 
    } 
} 

,並設置點擊收聽,

TextClick click=new TextClick(); 
for (int i = 0; i < x; i++) { 
    TextHolder firstOne = genList.get(i); 
    String text = firstOne.getText(); 
    mainText[i] = new TextView(this);  
    mainText[i].setOnClickListener(click); 
    ... 
} 
+0

謝謝你的答覆。好吧要試試這個,看看它是否有效。 – Viking 2012-01-18 04:11:00

+0

它的工作感謝AVD的寶貴意見。 – Viking 2012-01-18 04:30:10

0

例如。你有一個List tvs來存儲由db結果創建的TextView對象。你應該做的是這樣的:

for(int i =0;i<tvs.count;i++){ 
tvs.get(i).setOnClickListener(new OnClickListener(){ 
... 
}) 
} 
+0

謝謝你的答案reply.your不反正完成,但我得到了你想say.Im不知道我是否需要使用for循環與否,如果我有那麼它可以適合什麼在code.I已經嘗試使用for循環一次,但沒有成功。此外,我直接添加我的TextViews在LinearLayout而不使用ListViews。 – Viking 2012-01-18 04:02:20

0

這不管是動態生成的視圖上點擊監聽器相同的設置。

button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      dosomething(); 
     } 
    }); 
+0

感謝您的答覆。但它將如何知道哪個TextView用戶正在點擊?我試着做以下已經insed for循環,我有: 的mainText [I] .setOnClickListener(新View.OnClickListener(){ 公共無效的onClick(視圖v){ DoSomething的();} }); 但這影響了所有文字瀏覽而不是特定的點擊 – Viking 2012-01-18 04:03:49

相關問題