如何在动态创建的 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 variableonClick 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();
    }
});
}