我正在设计我的应用程序以使用Android L并设计它以使用新的Material Design。
我正在https://developer.android.com/preview/material/ui-widgets.html查看RecyclerView的示例,但该示例并未编译。
以下是我的活动课
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] myDataset = new String[2];
myDataset[0] = "Hello";
myDataset[1] = "World";
setContentView(R.layout.activity_recylcer);
mRecyclerView = (RecyclerView)findViewById(R.id.recylcerView);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
mAdapter = new MyAdapter(myDataset);
mRecyclerView.setAdapter(mAdapter);
}
以下是我的MyAdapter课程
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private String[] mDataset;
// Provide a reference to the type of views that you are using
// (custom viewholder)
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView mTextView;
public ViewHolder(TextView v) {
super(v);
mTextView = v;
}
}
// Provide a suitable constructor (depends on the kind of dataset)
public MyAdapter(String[] myDataset) {
mDataset = myDataset;
}
// Create new views (invoked by the layout manager)
@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
// create a new view
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.my_text_view, parent, false);
// set the view's size, margins, paddings and layout parameters
ViewHolder vh = new ViewHolder(v);
return vh;
}
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
// - get element from your dataset at this position
// - replace the contents of the view with that element
holder.mTextView.setText(mDataset[position]);
}
// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return mDataset.length;
}
}
我遇到的问题是,当我创建ViewHolder的实例时,该示例说要传入变量v
这是一个View但是Android Studio说它需要一个TextView。
我假设我做错了,因为我觉得Google的Android开发网站会有正确的代码,但我无法看到生活中的例子我可能有什么错。
感谢您提供的任何帮助。
答案 0 :(得分:2)
据我所知,它期望TextView
,因为您在ViewHolder静态类的构造函数中请求TextView
。将其更改为View
。这可能有所帮助。
答案 1 :(得分:2)
如果您不想像Boldizsar所说的那样想要更改构造函数,那么为什么不尝试将充气视图转换为TextView并使用该textview创建一个视图。
答案 2 :(得分:2)
试试此代码
public ViewHolder(View v) {
super(v);
mTextView = (TextView) v.findViewById(R.id.textView);
}
R.layout.my_text_view看起来像这样
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:background="@drawable/background"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Some text here"
android:id="@+id/textView"
android:layout_centerInParent="true" />
</RelativeLayout>