单击时获取动态生成的TextView的文本

时间:2013-10-11 09:42:02

标签: java android onclick textview

我正在通过for循环运行并生成应该可单击的TextView,因为我想启动一个intent并将url作为参数和源传递。

所以,我试过这个

articleURL[i].setPaintFlags(articleURL[i].getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
articleURL[i].setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //System.out.println(articleURL[v.getId()].getText().toString());
        System.out.println(v.getId());
    }
});

我遇到的问题是v.getId()始终为0.当我使用注释代码时

System.out.println(articleURL[v.getId()].getText().toString()); 

我得到一个说

的例外
java.lang.ArrayIndexOutOfBoundsException: length=10; index=-1

我只需要点击TextView的内容。我到底怎么做到了? articleURL [i]不起作用,因为他当时不知道。 v.getId()如何始​​终为-1?无论我点击哪一个?

这是完整的for循环

TextView articleURL = new TextView[hashMapSize];
for (int i = 0; i < hashMapSize; i++) {
    articleURL[i] = new TextView(getActivity());
    articleURL[i].setPaintFlags(articleURL[i].getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
    articleURL[i].setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            System.out.println(articleURL[v.getId()].getText().toString());
            //System.out.println(v.getId());
        }
    });
}

3 个答案:

答案 0 :(得分:10)

您实际上在参数中获得了视图。只需将其强制转换为TextView并调用getText()

即可
public void onClick(View v) {
  Log.d("text",((TextView) v).getText().toString());
}

另请勿使用System.out.println。这是Android,而不是桌面Java,编码android与普通Java的巨大差异。你应该买一本关于Android的书并阅读它,否则你的应用程序很快就会崩溃,你将没有机会修复它们。

答案 1 :(得分:0)

您可以尝试以下方法:

View.OnClickListener listener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        System.out.println(((TextView)v).getText());
    }
};
// ... some loop
articleURL[i].setOnClickListener(listener);

如果您还想获得项目索引,请尝试以下方法:

View.OnClickListener listener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        System.out.println(v.getTag());
    }
};
// ... some loop
articleURL[i].setTag(i);
articleURL[i].setOnClickListener(listener);

答案 2 :(得分:0)

试试这个..

将其用作globel

TextView articleURL[];

然后将articleURL初始化为

articleURL = new TextView[hashMapSize];

然后,如果你的扩展权力意味着使用以下

articleURL[i]   = new TextView(getActivity());

扩展活动意味着

articleURL[i]   = new TextView(this);

System.out.println(((TextView)v).getText().toString());