我非常简单的 Android RecycleView 测试出现问题

艾伦史塔克

再会。

我有一个非常简单的 Android RecycleView 测试:

在 build.gradle 中:

dependencies {
...
implementation 'com.android.support:recyclerview-v7:28.0.0'
...
}

在布局 activity_main.xml 中:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/my_recycler_view"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </android.support.v7.widget.RecyclerView>
</LinearLayout>

在布局 activity_list_item.xml 中:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="72dp"
    android:layout_marginLeft="16dp"
    android:layout_marginRight="16dp"
    android:gravity="center_vertical">
    <TextView
        android:id="@+id/itemNumber"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="itemNumber"/>
</FrameLayout>

在 MainActivity.java 中:

   package com.as.recyclerview_test;

   import ...; 

   public class MainActivity extends AppCompatActivity {
        private RecyclerView mRecyclerView;
        private RecyclerView.Adapter mAdapter;
        private RecyclerView.LayoutManager mLayoutManager;

        public static String[] myDataset = {"111", "222", "333"};

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

       mRecyclerView = findViewById(R.id.my_recycler_view);
       mRecyclerView.setHasFixedSize(true);
       mLayoutManager = new LinearLayoutManager(this);
       mRecyclerView.setLayoutManager(mLayoutManager);
       mAdapter = new MyAdapter(myDataset);
       mRecyclerView.setAdapter(mAdapter);
   }
}

在 MyAdapter.java 中:

package com.as.recyclerview_test; 

import ...;

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {

    private String[] mDataset;

    public MyAdapter(String[] myDataset) {
        mDataset = myDataset;
    }

    public static class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView itemNumber;
        public MyViewHolder(TextView v) {
            super(v);
            itemNumber = v.findViewById(R.id.itemNumber);
        }
    }

    @Override
    public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        TextView v = LayoutInflater.from(viewGroup.getContext())
                .inflate(R.layout.activity_list_item, viewGroup, false);
        return new MyViewHolder(v);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        holder.itemNumber.setText(mDataset[position]);
    }

    @Override
    public int getItemCount() {
        return mDataset.length;
    }

}

当我运行这个项目时,我收到了应用程序停止消息和

致命异常:主要

java.lang.ClassCastException:无法将 android.widget.FrameLayout 转换为 com.as.recyclerview_test.MyAdapter.onCreateViewHolder 处的 android.widget.TextView

我使用了官方 [ https://developer.android.com/guide/topics/ui/layout/recyclerview#java]模式。

我的代码有什么问题?先感谢您...

亚姆科

您在 onCreateViewHolder 方法中有错误。您正在尝试在膨胀布局时将 FrameLayout 转换为 TextView。这里是正确的方法。

@Override
public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
    View v = LayoutInflater.from(viewGroup.getContext())
            .inflate(R.layout.activity_list_item, viewGroup, false);
    return new MyViewHolder(v);
}

此外,您应该将 View 传递给 ViewHolder 构造函数,而不是 TextView。

public static class MyViewHolder extends RecyclerView.ViewHolder {
    public TextView itemNumber;
    public MyViewHolder(View v) {
        super(v);
        itemNumber = v.findViewById(R.id.itemNumber);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章