再会。
我有一个非常简单的 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] 删除。
我来说两句