【问题标题】:Putting JSON data into a ListView and it says I can't cast RelativeLayout to CustomAdapter?将 JSON 数据放入 ListView 并显示我无法将 RelativeLayout 转换为 CustomAdapter?
【发布时间】:2013-10-16 21:02:23
【问题描述】:

所有 JSON 解析工作并显示。唯一的问题是当我在 ListView 中滚动时,我会立即得到以下日志:

10-16 21:49:34.383: E/InputEventReceiver(6798): Exception dispatching input event.
10-16 21:49:34.383: D/AndroidRuntime(6798): Shutting down VM
10-16 21:49:34.383: W/dalvikvm(6798): threadid=1: thread exiting with uncaught exception (group=0x40e95a08)
10-16 21:49:34.438: E/AndroidRuntime(6798): FATAL EXCEPTION: main
10-16 21:49:34.438: E/AndroidRuntime(6798): java.lang.ClassCastException: android.widget.RelativeLayout cannot be cast to         com.android.test.sandroid.MainActivity$FancyAdapter$ViewHolder
10-16 21:49:34.438: E/AndroidRuntime(6798):     at     com.android.test.sandroid.MainActivity$FancyAdapter.getView(MainActivity.java:180)

所以这就是发生的事情。这是我的代码正在构建 JSON 并使用自定义适配器将其提供给 List。有更好的方法吗?我关注了一个 youtube 教程视频。

//End of AsyncTask

class FancyAdapter extends ArrayAdapter<pData> {

    FancyAdapter() {
        super(getApplicationContext(), android.R.layout.simple_list_item_1, arrayOfNames);
    }

    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder;

        if (convertView == null) {
            LayoutInflater inflater = getLayoutInflater();
            convertView = inflater.inflate(R.layout.row, null);

            holder = new ViewHolder(convertView);
            convertView.setTag(convertView);

编辑:删除了无意义的代码。计数的位是下方的持有人。

【问题讨论】:

    标签: android json listview casting custom-adapter


    【解决方案1】:

    应该是convertView.setTag(holder); 而不是convertView.setTag(convertView);

    这称为 View Holder 模式,它允许您避免对重用的convertViewfindViewById() 方法调用。更多信息herehere

    【讨论】:

    • 这到底是什么... 修复了它。很简单。我真的很感激这一点。非常感谢。 8 分钟前我可以接受答案,但我会接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 2020-02-16
    • 1970-01-01
    • 2020-03-30
    • 2021-03-07
    • 2014-05-26
    • 2015-06-16
    相关资源
    最近更新 更多