【发布时间】:2023-03-18 17:19:02
【问题描述】:
每当我尝试将 recyclerView 放入 android studio 中的片段时,我的应用就会崩溃。
我不知道发生了什么。我尝试使用按钮替换 Fragment 中的布局。该应用程序启动良好,但每当我单击按钮时,应用程序崩溃 每当我从模拟器甚至手机点击应用程序时,应用程序都会打开并立即返回主屏幕,并且不会显示任何错误消息。
主活动:
public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView=findViewById(R.id.recyclerView);
FrameLayout frameLayout = new FrameLayout(this);
frameLayout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));
frameLayout.setId(R.id.layout);
setContentView(frameLayout);
getSupportFragmentManager().beginTransaction().add(R.id.layout,new Fragment1()).commit();
}
}
片段类:
public class Fragment1 extends Fragment {
String[] Text={"he","hdhd","hdhdhdh","dhlsd","hshdsss","he","hdhd"};
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = LayoutInflater.from(getContext()).inflate(R.layout.rows,container,false);
RecyclerView recyclerView = view.findViewById(R.id.RecyclerView2);
ImrulsAdapter Adapter = new ImrulsAdapter(getContext(),Text);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setAdapter(Adapter);
return view;
}
}
自定义适配器类:
public class ImrulsAdapter extends RecyclerView.Adapter<ImrulsAdapter.ImrulsViewHolder> {
String[]Text;
Context context;
public ImrulsAdapter(Context context, String[] text ) {
Text = text;
this.context = context;
}
@NonNull
@Override
public ImrulsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.rows,parent,false);
return new ImrulsViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ImrulsViewHolder holder, int position) {
holder.textView.setText(Text[position]);
}
@Override
public int getItemCount() {
return Text.length;
}
public class ImrulsViewHolder extends RecyclerView.ViewHolder{
TextView textView;
public ImrulsViewHolder(@NonNull View itemView) {
super(itemView);
textView= itemView.findViewById(R.id.textView);
}
}
}
日志猫输出:
2021-11-02 22:46:34.026 12332-12332/com.example.recyclerviewinsideafragment E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.recyclerviewinsideafragment, PID: 12332
java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.recyclerview.widget.RecyclerView.setLayoutManager(androidx.recyclerview.widget.RecyclerView$LayoutManager)' on a null object reference
at com.example.recyclerviewinsideafragment.Fragment1.onCreateView(Fragment1.java:29)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2963)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:518)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2100)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3138)
at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:3072)
at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:251)
at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:502)
at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:246)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1432)
at android.app.Activity.performStart(Activity.java:7923)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3359)
at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2068)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:7551)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:995)
2021-11-02 22:46:34.047 12332-12332/? I/Process: Sending signal. PID: 12332 SIG: 9
【问题讨论】:
-
请编辑问题并复制粘贴日志输出。
-
丢失了最重要的一段代码:崩溃的堆栈跟踪。请也删除不必要的部分(例如 Manifest + build.gradle,可能还有其他东西)
-
现在可以了吗?
-
堆栈跟踪显示回收器视图为空。在 findViewById 中好像找不到
-
有什么可能的原因吗,为什么会这样?
标签: android android-studio android-fragments android-recyclerview crash