java - 需要帮助弄清楚为什么我无法使用自定义 ArrayAdapter 更改 TextView 文本

标签 java android android-arrayadapter

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

activity_main.xml

<RelativeLayout>
    <ListView android:id="@+id/emoticon_listview" />
</RelativeLayout>

item.xml

<TextView />

MainActivity.java

protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    int start = 0x1F004;
    int end = 0x1F65C;

    ListView listView = (ListView)findViewById(R.id.emoticon_listview);
    Integer[] emoticon_array = new Integer[end - start]

    for(int codepoint=start, i=0; codepoint<end; codepoint++, i++){
        emoticon_array[i] = codepoint;
    }

    CustomArrayAdapter customArrayAdapter = new CustomArrayAdapter(this, R.layout.item, emoticon_array);
    listView.setAdapter(customArrayAdapter);
}

CustomArrayAdapter.java

public class CustomArrayAdapter extends ArrayAdapter {
    public customArrayAdapter(Context context, int resource, Object[] objects){
        super(context, resource, objects);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent){
        TextView textView = (TextView) convertView;

        if(textView != null){
            textView.setText(new String(Characters.toChars(Integer.parseInt(textView.getText().toString))));
            // -or-
            textView.setText("Hello, world!");
            // -or-
            textView.setText("whatever ...");
        }
    }

    return super.getView(position, convertView, parent);
}

问题是,无论我在 CustomArrayAdapter 的重写 getView()textView.setText() 中放入什么,它始终显示原始 emoticon_array 中的内容。

我什至尝试过这个:

return super.getView(position, textView, parent);

但这也没有任何作用。

我做错了什么?

谢谢:)

最佳答案

您应该在自己的 getView() 方法的开头调用 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)。然后您可以进行任何您想要的更改并直接返回结果 View 。

请注意,我已删除此行:

    textView.setText(new String(Characters.toChars(Integer.parseInt(textView.getText().toString))));

首先,它缺少一对括号,这会导致编译器错误。更重要的是,这做了很多工作却没有带来明显的好处。如果原始文本不是数字,最终结果要么是错误,要么将文本设置回原始值。

关于java - 需要帮助弄清楚为什么我无法使用自定义 ArrayAdapter 更改 TextView 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47140965/

相关文章:

java - 向适配器添加新数据会影响初始值

java - 这是一个虚假的唤醒还是只是一个时髦的(非虚假的)竞争条件?

java - 带有 viewModel 和 Livedata 的 RecyclerView 适配器

java - 如果项目通过 "Run Project"或 build.xml>run 运行,NetBeans 的行为会有所不同

android - 切换Activity时运行进度条

android - 如何更改 Spinner 的下拉列表颜色

android - 在 Button 的 Onclick 中从 Adapter 类重新加载 ListView 数据

android - 如何从 ArrayAdapter 中的 onClickListener 重新加载 Activity

java - 找不到 Synology Scheduler .sh java 命令

java - 如何在 fragment 中设置 UI 值