Java 需要帮助了解为什么无法使用自定义ArrayAdapter更改TextView文本吗

Java 需要帮助了解为什么无法使用自定义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

我有一个非常简单的应用程序:

活动\u main.xml

<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_Singh
super.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))));