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类plementing
View.OnClickListener
,这是所有的,如果OP只在侦听单击时需要字段,那么实现View.OnClickListener就可以了。我给出了一个更通用的解决方案,OP也可以从中获得其他实例的字段。方法不同,但结果相同。OP需要“url”和用户单击视图时使用的“视图名称”,因此只需将其存储为类字段(在自定义
view.OnClickListener
class中)不,您应该创建一个实现
视图的类。OnClickListener
,这是所有的如果OP只在侦听单击时需要字段,那么实现View.OnClickListener就可以了。我给出了一个更通用的解决方案,OP也可以从中获得其他实例的字段。不同的方法,但结果相同。什么
“其他实例“
?OP希望在用户单击视图时使用“url”和“视图名称”,因此只需将它们存储为类字段(在自定义
视图中。OnClickListener
类中)