我一直在使用 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
现在,你可以
移除包装的 LinearLayout,以便您在 xml 中获得
TextView
,然后您需要转换适配器ViewHolder vh = new ViewHolder((TextView) v);
调整您的 ViewHolder 以接受 View 或 LinearLayout
public ViewHolder(View v) { mTextView = (TextView) v.findViewById(R.id.text); }
关于android - 无法设置 Recycler View,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34866530/