如何在动态创建的TextView上获取文本?

时间:2015-05-14 09:59:58

标签: android textview onclicklistener

到目前为止,我有这个代码,用来自usernames arrayList的文本创建TextViews。

    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操作?

8 个答案:

答案 0 :(得分:4)

class user extends database {
   //code user class goes here
}

答案 1 :(得分:1)

您正在为TextViews使用单个变量,并继续覆盖它。

你应该做的是像这样创建一个文本视图数组

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);
}

答案 2 :(得分:1)

将此内容放入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);

答案 3 :(得分:1)

 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);

}

答案 4 :(得分:1)

声明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);

}

答案 5 :(得分:0)

是的。它应该是那样的。

你在for循环中是referencing the same variableonClick listener仅适用于最后一个TextView

答案 6 :(得分:0)

为什么不使用带有用户名列表操作的ArrayListAdapter创建一个简单的listView?然后你免费获得onItemClick?

答案 7 :(得分:0)

试试这样:

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回调中获取它们。