2015-05-14 71 views
3

到目前爲止,我有這樣的代碼,用來自用戶名arrayList的文本創建TextViews。如何獲取文本點擊動態創建的TextView?

TextView txt_con = null; 

    for(int i=0; i<usernames.size(); i++) 
    { 
     txt_con = new TextView(this); 
     txt_con.setLayoutParams(lparams); 
     txt_con.setPadding(0, 30, 0, 0); 
     txt_con.setText(usernames.get(i)); 
     ll_cont.addView(txt_cont); 
    } 

和onClickListener

txt_con.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      @SuppressWarnings("unused") 
      TextView t = ((TextView)v); 
      String str = t.getText().toString(); 
     } 
    }); 

但是,只需要在最後的TextView中的onClick動作。 如何在所有TextView中獲得onClick動作?

回答

3
TextView txt_con = null; 

for(int i=0; i<usernames.size(); i++) 
{ 
    txt_con = new TextView(this); 
    txt_con.setLayoutParams(lparams); 
    txt_con.setPadding(0, 30, 0, 0); 
    txt_con.setText(usernames.get(i)); 
    ll_cont.addView(txt_cont); 

    txt_con.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     @SuppressWarnings("unused") 

     String str = txt_con.getText().toString(); 
    } 
}); 
} 
0

是的。它應該是這樣的。

您在for循環中是referencing the same variableonClick listener將只爲最後一個TextView工作

1

對TextViews使用單個變量並覆蓋它。

你應該做的是創建文本視圖像這樣的

int textViewCount = usernames.size(); 
TextView[] textViewArray = new TextView[textViewCount]; 

for(int i = 0; i<usernames.size(); i++) { 
    textViewArray[i] = new TextView(this); 
    textViewArray[i].setLayoutParams(lparams); 
    textViewArray[i].setPadding(0, 30, 0, 0); 
    textViewArray[i].setText(usernames.get(i)); 
    ll_cont.addView(txt_cont); 
} 
1

將這個你在for循環中的數組 -

txt_con.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     @SuppressWarnings("unused") 
     TextView t = ((TextView)v); 
     String str = t.getText().toString(); 
    } 
}); 

之前做到這一點 -

ll_cont.addView(txt_cont); 
0

爲什麼不做一個簡單的listView與一個ArrayListAdapter,它接受用戶名列表操作?那麼你可以免費獲得ItemClick?

1
for(int i=0; i<usernames.size(); i++) 
    { 
     txt_con = new TextView(this); 
     txt_con.setLayoutParams(lparams); 
     txt_con.setPadding(0, 30, 0, 0); 
     txt_con.setText(usernames.get(i)); 
     txt_con.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // This will be called for every textView separately  
      // YOUR Code 
     } 
    }); 
    ll_cont.addView(txt_cont); 

} 
0

試試這樣說:

TextView txt_con = null; 

for(int i=0; i<usernames.size(); i++) 
{ 
    txt_con = new TextView(this); 
    txt_con.setId(i); 
    txt_con.setOnClickListener(this); 
    txt_con.setLayoutParams(lparams); 
    txt_con.setPadding(0, 30, 0, 0); 
    txt_con.setText(usernames.get(i)); 
    ll_cont.addView(txt_cont); 
} 

從您的活動實現OnClickListener,做這樣的事情:

@Override 
    public void onClick(View v) { 
     switch(v.getId()) 
     { 
      case 0:{ 
      //do something 
      } 
      case 1:{ 
      //do something 
      } 
      // and so on 
     } 
    } 

設置ID爲TextView的內部for循環將有助於獲取他們在onClick回調。

1

聲明TextView並在循環內設置onClickListener。

for(int i=0; i<usernames.size(); i++) 
{ 
    TextView txt_con = new TextView(this); 
    txt_con.setLayoutParams(lparams); 
    txt_con.setPadding(0, 30, 0, 0); 
    txt_con.setText(usernames.get(i)); 

    txt_con.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     @SuppressWarnings("unused") 
     TextView t = ((TextView)v); 
     String str = t.getText().toString(); 
    } 
}); 

    ll_cont.addView(txt_cont); 

} 
相關問題