Android 如何在动态创建的文本框上获取Click Listener
我收到了创建Android 如何在动态创建的文本框上获取Click Listener,android,performance,android-layout,listview,android-fragments,Android,Performance,Android Layout,Listview,Android Fragments,我收到了创建2个文本框的响应,我收到了两个视图的URL和显示文本,我将它们添加到ArrayList。现在我需要在它们上面添加click listener。我已经编写了以下代码 for(int i=0; i<tvArrayList.size(); i++){ TextView textView; textView= tvArrayList.get(i); textView.setOnClickListener(new View.OnClickListener()
2个文本框的响应,我收到了两个视图的URL和显示文本,我将它们添加到ArrayList
。现在我需要在它们上面添加click listener。我已经编写了以下代码
for(int i=0; i<tvArrayList.size(); i++){
TextView textView;
textView= tvArrayList.get(i);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i= new Intent(MavsV2PromoActivity.this, DynamicWebView.class);
i.putExtra("URL", URL_LINK);
i.putExtra("VIEW_NAME",VIEW_NAME);
startActivity(i);
}
});
}
这不正是你需要做的吗?什么是“TvarayList”?您需要在循环中生成TextView
for(int i=0; i<myResults.size(); i++){
TextView textView = new TextView(this);
tvArrayList.add(textView);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i= new Intent(MavsV2PromoActivity.this, DynamicWebView.class);
i.putExtra("URL", URL_LINK);
i.putExtra("VIEW_NAME",VIEW_NAME);
startActivity(i);
}
});
}
for(int i=0;i这不是您需要做的更多吗?什么是“tvArrayList”?您需要在循环中生成文本视图
for(int i=0; i<myResults.size(); i++){
TextView textView = new TextView(this);
tvArrayList.add(textView);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i= new Intent(MavsV2PromoActivity.this, DynamicWebView.class);
i.putExtra("URL", URL_LINK);
i.putExtra("VIEW_NAME",VIEW_NAME);
startActivity(i);
}
});
}
for(int i=0;i您正在为两个按钮放置相同的url。当第一个循环完成时,url_LINK(我假设它是类成员,尽管大写通常用于常量)具有最后一个值
您只需将OnClickListener创建放入第一个循环:
ArrayList<TextView> tvArrayList= new ArrayList<TextView>();
for(int i=0; i<linksDataList.size(); i++){
String urlLink = linksDataList.get(i).getLinkURL();
String viewName = linksDataList.get(i).getName();
TextView textView =new TextView(this);
textView.setText(linksDataList.get(i).getName());
if(linksDataList.size() != i) {
textView.append(" | ");
}
ll_links.addView(textView);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i= new Intent(MavsV2PromoActivity.this, DynamicWebView.class);
i.putExtra("URL", URL_LINK);
i.putExtra("VIEW_NAME",VIEW_NAME);
startActivity(i);
}
});
tvArrayList.add(textView);
}
ArrayList tvArrayList=new ArrayList();
对于(int i=0;i您正在为两个按钮放置相同的url。当第一个循环完成时,url_LINK(我假设它是类成员,尽管大写通常用于常量)具有最后一个值
您只需将OnClickListener创建放入第一个循环:
ArrayList<TextView> tvArrayList= new ArrayList<TextView>();
for(int i=0; i<linksDataList.size(); i++){
String urlLink = linksDataList.get(i).getLinkURL();
String viewName = linksDataList.get(i).getName();
TextView textView =new TextView(this);
textView.setText(linksDataList.get(i).getName());
if(linksDataList.size() != i) {
textView.append(" | ");
}
ll_links.addView(textView);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i= new Intent(MavsV2PromoActivity.this, DynamicWebView.class);
i.putExtra("URL", URL_LINK);
i.putExtra("VIEW_NAME",VIEW_NAME);
startActivity(i);
}
});
tvArrayList.add(textView);
}
ArrayList tvArrayList=new ArrayList();
对于(int i=0;i如果需要将字段附加到textView,在本例中为URL\u链接和VIEW\u名称,则始终可以通过扩展一个字段来创建自己的textView类
public class MyCustomTextView extends TextView {
private String urlLink; //The fields required.
private String viewName;
//The getter and setter for each field.
public String getUrlLink() {
return urlLink;
}
public void setUrlLink(String urlLink) {
this.urlLink = urlLink;
}
public String getViewName() {
return viewName;
}
public void setViewName(String viewName) {
this.viewName = viewName;
}
public MyCustomTextView(Context context) {
super(context);
}
public MyCustomTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyCustomTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
}
现在,您应该创建刚刚在上面创建的CustomTextView,而不是创建TextView
ArrayList<MyCustomTextView> tvArrayList= new ArrayList<>();
for(int i=0; i<linksDataList.size(); i++){
URL_LINK= linksDataList.get(i).getLinkURL();
VIEW_NAME= linksDataList.get(i).getName();
MyCustomTextView textView =new MyCustomTextView(this);
textView.setUrlLink(URL_LINK); //Set fields here
textView.setViewName(VIEW_NAME);
textView.setText(linksDataList.get(i).getName());
if(linksDataList.size() != i) {
textView.append(" | ");
}
ll_links.addView(textView);
tvArrayList.add(textView);
}
ArrayList tvArrayList=new ArrayList();
对于(int i=0;i如果需要将字段附加到textView,在本例中为URL\u链接和VIEW\u名称,则始终可以通过扩展一个字段来创建自己的textView类
public class MyCustomTextView extends TextView {
private String urlLink; //The fields required.
private String viewName;
//The getter and setter for each field.
public String getUrlLink() {
return urlLink;
}
public void setUrlLink(String urlLink) {
this.urlLink = urlLink;
}
public String getViewName() {
return viewName;
}
public void setViewName(String viewName) {
this.viewName = viewName;
}
public MyCustomTextView(Context context) {
super(context);
}
public MyCustomTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyCustomTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
}
现在,您应该创建刚刚在上面创建的CustomTextView,而不是创建TextView
ArrayList<MyCustomTextView> tvArrayList= new ArrayList<>();
for(int i=0; i<linksDataList.size(); i++){
URL_LINK= linksDataList.get(i).getLinkURL();
VIEW_NAME= linksDataList.get(i).getName();
MyCustomTextView textView =new MyCustomTextView(this);
textView.setUrlLink(URL_LINK); //Set fields here
textView.setViewName(VIEW_NAME);
textView.setText(linksDataList.get(i).getName());
if(linksDataList.size() != i) {
textView.append(" | ");
}
ll_links.addView(textView);
tvArrayList.add(textView);
}
ArrayList tvArrayList=new ArrayList();
对于(int i=0;iThanks,文本视图生成并保存在tvArrayList
中,我在问题中添加tvArrayList代码谢谢,文本视图生成并保存在tvArrayList
中,我在问题中添加tvArrayList代码您的URL\u链接和视图\u名称正在被修改,并且始终具有las的值。)tvArrayList中的t项。我建议通过扩展TextView和app a字段来创建自定义TextView类,以存储该TextView的url和视图名称。@KartikSharma自定义TextView?我打赌您是指实现OnClickListener
接口的自定义类,不是吗?您的url\u链接和视图名称正在被修改,并且将被删除ays具有tvArrayList中最后一项的值。我建议通过扩展TextView和app a字段来创建自定义TextView类,以存储该TextView的url和视图名称。@KartikSharma自定义TextView?我打赌你是指实现OnClickListener
接口的自定义类,不是吗?不,你应该创建一个im类plementingView.OnClickListener
,这是所有的,如果OP只在侦听单击时需要字段,那么实现View.OnClickListener就可以了。我给出了一个更通用的解决方案,OP也可以从中获得其他实例的字段。方法不同,但结果相同。OP需要“url”和用户单击视图时使用的“视图名称”,因此只需将其存储为类字段(在自定义view.OnClickListener
class中)不,您应该创建一个实现视图的类。OnClickListener
,这是所有的如果OP只在侦听单击时需要字段,那么实现View.OnClickListener就可以了。我给出了一个更通用的解决方案,OP也可以从中获得其他实例的字段。不同的方法,但结果相同。什么“其他实例“
?OP希望在用户单击视图时使用“url”和“视图名称”,因此只需将它们存储为类字段(在自定义视图中。OnClickListener
类中)