我正在通过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());
}
});
}
答案 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());