android - 无法设置 Recycler View

标签 android android-recyclerview

我一直在使用 ListView,现在尝试使用 Recycler View 。一直在尝试按照基本设置的文档进行操作,但令人沮丧的是无法这样做。

ViewHolder 类应该接受一个 TextView 参数,但在文档站点中,示例是输入一个 View 作为参数,但我不明白它应该如何工作。我试图用 TextView 转换它并得到一个 ClassCastException。我在该行上方发表了评论,该错误导致我无法编译。错误在 MyAdapter 类中。

如果我只是不擅长阅读文档,我深表歉意,否则这来自官方网站就太荒谬了。 Official page

主要 Activity

public class MainActivity extends AppCompatActivity {

    private RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;

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

        mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
        mRecyclerView.setHasFixedSize(true);

        mLayoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(mLayoutManager);

        String[] myDataset = {"item 1", "item 2"};

        mAdapter = new MyAdapter(myDataset);
        mRecyclerView.setAdapter(mAdapter);
    }
}

MyAdapter 类

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private String[] mDataset;

    public static class ViewHolder extends RecyclerView.ViewHolder {
        public TextView mTextView;
        public ViewHolder(TextView v) {
            super(v);
            mTextView = v;
        }
    }

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

    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                   int viewType) {
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.my_text_view, parent, false);

        //THIS is the line causing error. v is View. I should be inputting a textview. 
        ViewHolder vh = new ViewHolder(v);

        return vh;
    }

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

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

}

我的 TextView xml

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:id="@+id/textView" />
</LinearLayout>

最佳答案

你从 inflate 得到一个 LinearLayout:

View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.my_text_view, parent, false);
// v <- LinearLayout

现在,你可以

  1. 移除包装的 LinearLayout,以便您在 xml 中获得 TextView,然后您需要转换适配器

    ViewHolder vh = new ViewHolder((TextView) v);
    
  2. 调整您的 ViewHolder 以接受 View 或 LinearLayout

    public ViewHolder(View v) {
      mTextView = (TextView) v.findViewById(R.id.text);
    }
    

关于android - 无法设置 Recycler View,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34866530/

相关文章:

android - SharedPreferences 不适用于 Resume

java - IabHelper.startSetup() 导致 NullPointerException

android - Gradle找不到Google服务插件

android - RecyclerView : how to clear cached/recycled views?

android - 仅将 RecyclerView 中的 View 动态添加到当前项目

android - RecyclerView.Adapter onBindViewHolder() 位置错误

android - 如何在 recyclerview 项目点击时取消选择所有其他位置值?

android - 如何禁用 fragment 的操作栏选项卡?

android - CallLog 未提供正确的 NUMBER 值(已拨号码)

java - 在 RecyclerView 中使用 RecyclerView.OnScrollListener 实现加载更多项得到重复项