如何在动态创建的 TextView 上获取文本 onClick?
How to get the text onClick on a TextView that is created dynamically?
到目前为止,我已经有了这段代码,可以使用用户名 arrayList 中的文本创建 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 操作?
是的。应该是这样吧
您在 for 循环中 referencing the same variable
。 onClick listener
仅适用于最后一个 TextView
您正在为 TextView 使用单个变量,并不断覆盖它。
你应该做的是像这样创建一个文本视图数组
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);
}
把这个放在你的 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);
为什么不使用 ArrayListAdapter 创建一个简单的 listView 来获取用户名的列表操作?那你就免费获得onItemClick?
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);
}
这样试试:
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);
}
从您的 Activity 实施 OnClickListener 并执行如下操作:
@Override
public void onClick(View v) {
switch(v.getId())
{
case 0:{
//do something
}
case 1:{
//do something
}
// and so on
}
}
在 for 循环中设置 TextView 的 ID 将有助于在 onClick 回调中获取它们。
声明 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);
}
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();
}
});
}
到目前为止,我已经有了这段代码,可以使用用户名 arrayList 中的文本创建 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 操作?
是的。应该是这样吧
您在 for 循环中 referencing the same variable
。 onClick listener
仅适用于最后一个 TextView
您正在为 TextView 使用单个变量,并不断覆盖它。
你应该做的是像这样创建一个文本视图数组
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);
}
把这个放在你的 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);
为什么不使用 ArrayListAdapter 创建一个简单的 listView 来获取用户名的列表操作?那你就免费获得onItemClick?
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);
}
这样试试:
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);
}
从您的 Activity 实施 OnClickListener 并执行如下操作:
@Override
public void onClick(View v) {
switch(v.getId())
{
case 0:{
//do something
}
case 1:{
//do something
}
// and so on
}
}
在 for 循环中设置 TextView 的 ID 将有助于在 onClick 回调中获取它们。
声明 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);
}
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();
}
});
}