2015-05-14 60 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); 

}