gpt4 book ai didi

java - Android 应用程序因 RecyclerView 而崩溃

转载 作者:行者123 更新时间:2023-11-29 04:18:04 25 4
gpt4 key购买 nike

我正在尝试在我的主屏幕 Activity 中添加一个简单的 RecyclerView,每个 View 都包含水果名称。在添加 RecyclerView 代码之前,我的应用运行良好。但是在添加 RecyclerView 代码后,它开始崩溃。经过一些调试后,我发现当我将 RecyclerView 适配器设置为我的 recyclerView 对象时,我的应用程序崩溃了。正是在这个声明中:list_container.setAdapter(list_container_adapter);

请帮助我可能出错的地方。下面是提供的完整代码。

主屏幕.java:

public class MainScreen extends AppCompatActivity {


private RecyclerView list_container;
private RecyclerView.Adapter list_container_adapter;
private RecyclerView.LayoutManager list_container_layout_manager;
private String[] fruits = {"Apple","Mango","Banana","Orange","Grapes","Cherry","Grapes","Pineapple","Stawberry","Litchi",
"Custard Apple","Plum","Peaches","Dragonfruit","Chickoo","Sweet Lime"};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_screen);
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
toolbar.setTitle("");
setSupportActionBar(toolbar);
myView = findViewById(R.id.my_view);
list_container = (RecyclerView)findViewById(R.id.list_container);
list_container.setHasFixedSize(true);
list_container_layout_manager = new LinearLayoutManager(this);
list_container.setLayoutManager(list_container_layout_manager);
list_container_adapter = new ListContainerAdapter(MainScreen.this,fruits);
list_container.setAdapter(list_container_adapter);
}
}

ListContainerAdapter.java:

public class ListContainerAdapter extends RecyclerView.Adapter<ListContainerAdapter.MyViewHolder> {
private String[] mDataset;
private Context context;
public static class MyViewHolder extends RecyclerView.ViewHolder {
public TextView mTextView;
public MyViewHolder(TextView v) {
super(v);
mTextView = (TextView) v.findViewById(R.id.texttemp);
}
}

public ListContainerAdapter(Context context, String[] myDataset) {
this.context = context;
mDataset = myDataset;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {

TextView v = (TextView) LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_container_element, parent, true);

MyViewHolder vh = new MyViewHolder(v);
return vh;
}

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

}

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

build.gradle:

    apply plugin: 'com.android.application'

android {
compileSdkVersion 27
defaultConfig {
applicationId "com.bismuth.deadline"
minSdkVersion 21
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
implementation 'com.android.support:support-v4:27.1.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
implementation 'com.android.support:recyclerview-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'
}

堆栈跟踪

06-27 02:34:07.906 2711-2711/com.bismuth.deadline E/AndroidRuntime: 
FATAL EXCEPTION: main Process: com.bismuth.deadline, PID: 2711
java.lang.ClassCastException: android.support.v7.widget.RecyclerView
cannot be cast to android.widget.TextView at com.bismuth.deadline.ListContainerAdapter.onCreateViewHolder(ListContainerAdapter.java:30) at com.bismuth.deadline.ListContainerAdapter.onCreateViewHolder(ListContainerAdapter.java:9)

list_container_element.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:layout_gravity="center"
android:paddingTop="20dp"
android:paddingBottom="20dp"
android:paddingStart="10dp"
android:paddingEnd="10dp"
android:textSize="25dp"
android:id="@+id/texttemp"
android:gravity="center" />
</LinearLayout>

最佳答案

实际上应该是:

public MyViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {

View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_container_element, parent, true);

return new MyViewHolder(v);
}

在您的代码中,您正在转换
TextView 中查看



public MyViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {

TextView v = (TextView) LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_container_element, parent, true);

MyViewHolder vh = new MyViewHolder(v);
return vh;
}

您还可以查看是否需要在 inflate() 方法中将 false 作为参数传递给 attachToRoot

关于java - Android 应用程序因 RecyclerView 而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51051291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com