我收到了创建2 text boxes
的回复,我收到了两个视图的网址和显示文字,我将其添加到ArrayList
。现在我需要在它们上添加点击监听器。我写了以下代码。
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);
}
});
}
问题是,它将相同的URL值应用于两个视图,无论是单击第一个还是最后一个文本视图,它都会从列表中打开最后text view
的URL。
的TextView
ArrayList<TextView> tvArrayList= new ArrayList<TextView>();
for(int i=0; i<linksDataList.size(); i++){
URL_LINK= linksDataList.get(i).getLinkURL();
VIEW_NAME= 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);
tvArrayList.add(textView);
}
答案 0 :(得分:1)
这不是你需要做的更多吗?什么是“tvArrayList”?您需要在循环中生成textviews。
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);
}
});
}
答案 1 :(得分:1)
您为两个按钮添加了相同的网址。当第一个循环结束时,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);
}
答案 2 :(得分:1)
如果您需要将字段附加到textView(在本例中为URL_LINK和VIEW_NAME),则可以通过扩展一个来创建自己的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);
}
每当您想要访问字段时,只需使用getter即可。在您的情况下,如果单击TextView。
for(int i=0; i<tvArrayList.size(); i++){
final MyCustomTextView 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", textView.getUrlLink());
i.putExtra("VIEW_NAME",textView.getViewName());
startActivity(i);
}
});
}