Java 需要帮助了解为什么无法使用自定义ArrayAdapter更改TextView文本吗
我有一个非常简单的应用程序: 活动\u main.xmlJava 需要帮助了解为什么无法使用自定义ArrayAdapter更改TextView文本吗,java,android,android-arrayadapter,Java,Android,Android Arrayadapter,我有一个非常简单的应用程序: 活动\u main.xml <RelativeLayout> <ListView android:id="@+id/emoticon_listview" /> </RelativeLayout> <TextView /> 问题是,无论我在我的CustomArrayAdapter的被覆盖的getView()的textView.setText()中放置了什么,它总是显示原始表情数组中的内容 我甚至试过: ret
<RelativeLayout>
<ListView android:id="@+id/emoticon_listview" />
</RelativeLayout>
<TextView />
问题是,无论我在我的CustomArrayAdapter
的被覆盖的getView()
的textView.setText()
中放置了什么,它总是显示原始表情数组中的内容
我甚至试过:
return super.getView(position, textView, parent);
但那也没什么用
我做错了什么
谢谢:)您正在使用自定义布局
R.layout.item
so
- 您需要在getview中对该布局进行充气
- 找到您的视图(TextView)并应用更改,然后返回该视图
@Override public View getView(int position, View convertView, ViewGroup parent){ TextView textView; if(convertView == null){ convertView = LayoutInflater.from(getContext()).inflate(R.layout.item,parent,false); // to reuse view next time } // find your text view textView = (TextView)convertView.findViewById(R.id.yourTextViewID); textView.setText(getItem(position).toString()); //textView.setText("Hello, world!"); // -or- //textView.setText("whatever ..."); // return inflated view return convertView; }
注意:不要使用
对象
数组,使用获取项目
使用位置
从数组中显示项目您应该在自己的获取视图()方法开始时调用super.getView()
:
@Override
public View getView(int position, View convertView, ViewGroup parent){
TextView textView = (TextView) super.getView(position, convertView, parent);
textView.setText("Hello, world!");
// -or-
textView.setText("whatever ...");
return textView;
}
这允许您利用逻辑循环convertView
,如果它不是null
。然后,您可以进行任何更改,并直接返回结果视图
请注意,我已删除此行:
textView.setText(new String(Characters.toChars(Integer.parseInt(textView.getText().toString))));
首先,它缺少一对括号,这会导致编译器错误。更重要的是,这做了很多工作,却没有明显的好处。如果原始文本不是数字,则最终结果是错误,或者将文本设置回原始值。我在textView.setText()
行上得到一个NumberFormatException:invalid int”“
。是的,您正在使用自定义布局,我后来意识到,您必须按照更新的说明进行操作,请稍候,发布代码textView.setText(新字符串(Characters.toChars(Integer.parseInt(textView.getText().toString)))代码>即使在此处添加缺少的括号来修复编译器错误,这也会做大量工作,但没有明显的好处。您正在获取TextView的文本,将其转换为int,然后再转换回字符串。这个答案很好……只要您修复OP代码中的编译器错误和逻辑错误,这行就没有意义了return super.getView(position,convertView,parent)
返回要显示的视图,这可能会覆盖您对TextView所做的任何更改。这就是我尝试此操作的原因:return super.getView(position,TextView,parent)代码>这给了我同样的东西。你在这里给出的代码没有编译。return
语句是任何方法都无法使用的。@Pavneet_Singhsuper.getView()
已经负责回收convertView
或在新视图为null
时膨胀它。您的解决方案奏效了,但我很好奇为什么convertView
不是TextView
。为什么是家长?@Brian我不明白你的问题。您在哪里看到convertView
不是TextView
?我刚才假设,因为您使用了TextView TextView=(TextView)super.getView(position,convertView,parent)代码>而不是TextView TextView=(TextView)convertView代码>。为什么要对super
使用整个back引用?调用super.getView()
可以确保convertView
被正确回收,而无需我自己编写所有代码。这种行为应该与下面帕夫尼特·辛格的回答几乎相同。唯一的区别是,它使用构造函数中提供的布局作为名为resource
的参数,而不是硬编码R.layout.item
。
@Override
public View getView(int position, View convertView, ViewGroup parent){
TextView textView = (TextView) super.getView(position, convertView, parent);
textView.setText("Hello, world!");
// -or-
textView.setText("whatever ...");
return textView;
}
textView.setText(new String(Characters.toChars(Integer.parseInt(textView.getText().toString))));