RecyclerView 始终为空
RecyclerView is always null
我正在尝试在我的应用程序中实现 RecyclerView
,但我根本无法让它工作。它抛出 NPE,我找不到原因,因为我已经根据官方 Google 教程完成了所有操作。
Logcat 输出:
04-26 23:04:41.823 22356-22356/com.example.app W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41670d88)
04-26 23:04:41.823 22356-22356/com.example.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.app, PID: 22356
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.app/com.example.app.PastEventActivity}: android.view.InflateException: Binary XML file line #6: Error inflating class fragment
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2237)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2286)
at android.app.ActivityThread.access0(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1246)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:212)
at android.app.ActivityThread.main(ActivityThread.java:5135)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:877)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #6: Error inflating class fragment
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:240)
at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
at com.example.app.PastEventActivity.onCreate(PastEventActivity.java:22)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2201)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2286)
at android.app.ActivityThread.access0(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1246)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:212)
at android.app.ActivityThread.main(ActivityThread.java:5135)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:877)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.example.app.fragments.PastEventFragment.onCreateView(PastEventFragment.java:34)
at android.app.Fragment.performCreateView(Fragment.java:1700)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:870)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1044)
at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1146)
at android.app.Activity.onCreateView(Activity.java:4786)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:689)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:240)
at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
at com.example.app.PastEventActivity.onCreate(PastEventActivity.java:22)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2201)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2286)
at android.app.ActivityThread.access0(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1246)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:212)
at android.app.ActivityThread.main(ActivityThread.java:5135)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:877)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
at dalvik.system.NativeStart.main(Native Method)
PastEventFragment.java
public class PastEventFragment extends Fragment {
private RecyclerView mRecyclerView;
public PastEventFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View pastEvent = inflater.inflate(R.layout.fragment_past_event, container, false);
mRecyclerView = (RecyclerView) pastEvent.findViewById(R.id.pe_rv);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
return pastEvent;
}
}
fragment_past_event.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"
android:background="@drawable/backrepeat">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="@+id/pe_rv"
/>
</LinearLayout>
PastEventActivity.java
public class PastEventActivity extends ActionBarActivity {
ActionBar actionBar;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_past_event);
}
}
activity_past_event.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">
<fragment
android:name="com.example.app.fragments.PastEventFragment"
android:id="@+id/fragment_pe"
android:layout_height="match_parent"
android:layout_width="match_parent"
/>
</LinearLayout>
这段代码有什么问题?我尝试了其他问题的许多解决方案,但 none 对我有用。我正在寻求帮助,因为我将我的代码与官方指南和一些非官方教程进行了比较,它应该可以正常工作。
请定义XML命名空间,将xmlns:tools="http://schemas.android.com/tools"
到fragment_past_event.xml
LinearLayout放在主命名空间下面
您正在布局中使用 android:name="@+id/pe_rv"
。
你应该使用android:id="@+id/pe_rv"
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/pe_rv"
/>
在观察你的 logcat 之后,我认为你在 Inflating RecyclerView 上有第一个异常,然后是 NullPointer 异常。
您是否检查过 libs 文件夹中的 android-support-v7-recyclerview.jar
库?如果是,则检查目标 sdk 版本是否为 21
的清单文件
<uses-sdk
android:minSdkVersion="11" //or anything you need
android:targetSdkVersion="21" />
因为在互联网上尝试了所有方法后,我通过将目标从 17 更改为 21 解决了 recyclerview 膨胀错误。
也许这对将来的某个人有帮助,而不是像我一样浪费时间。
您在 PastEventFragment.java 中缺少 setContentView 指令,我遇到了同样的问题。
我正在尝试在我的应用程序中实现 RecyclerView
,但我根本无法让它工作。它抛出 NPE,我找不到原因,因为我已经根据官方 Google 教程完成了所有操作。
Logcat 输出:
04-26 23:04:41.823 22356-22356/com.example.app W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41670d88)
04-26 23:04:41.823 22356-22356/com.example.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.app, PID: 22356
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.app/com.example.app.PastEventActivity}: android.view.InflateException: Binary XML file line #6: Error inflating class fragment
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2237)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2286)
at android.app.ActivityThread.access0(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1246)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:212)
at android.app.ActivityThread.main(ActivityThread.java:5135)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:877)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #6: Error inflating class fragment
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:240)
at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
at com.example.app.PastEventActivity.onCreate(PastEventActivity.java:22)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2201)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2286)
at android.app.ActivityThread.access0(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1246)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:212)
at android.app.ActivityThread.main(ActivityThread.java:5135)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:877)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.example.app.fragments.PastEventFragment.onCreateView(PastEventFragment.java:34)
at android.app.Fragment.performCreateView(Fragment.java:1700)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:870)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1044)
at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1146)
at android.app.Activity.onCreateView(Activity.java:4786)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:689)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:240)
at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
at com.example.app.PastEventActivity.onCreate(PastEventActivity.java:22)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2201)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2286)
at android.app.ActivityThread.access0(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1246)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:212)
at android.app.ActivityThread.main(ActivityThread.java:5135)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:877)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
at dalvik.system.NativeStart.main(Native Method)
PastEventFragment.java
public class PastEventFragment extends Fragment {
private RecyclerView mRecyclerView;
public PastEventFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View pastEvent = inflater.inflate(R.layout.fragment_past_event, container, false);
mRecyclerView = (RecyclerView) pastEvent.findViewById(R.id.pe_rv);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
return pastEvent;
}
}
fragment_past_event.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"
android:background="@drawable/backrepeat">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="@+id/pe_rv"
/>
</LinearLayout>
PastEventActivity.java
public class PastEventActivity extends ActionBarActivity {
ActionBar actionBar;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_past_event);
}
}
activity_past_event.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">
<fragment
android:name="com.example.app.fragments.PastEventFragment"
android:id="@+id/fragment_pe"
android:layout_height="match_parent"
android:layout_width="match_parent"
/>
</LinearLayout>
这段代码有什么问题?我尝试了其他问题的许多解决方案,但 none 对我有用。我正在寻求帮助,因为我将我的代码与官方指南和一些非官方教程进行了比较,它应该可以正常工作。
请定义XML命名空间,将xmlns:tools="http://schemas.android.com/tools"
到fragment_past_event.xml
LinearLayout放在主命名空间下面
您正在布局中使用 android:name="@+id/pe_rv"
。
你应该使用android:id="@+id/pe_rv"
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/pe_rv"
/>
在观察你的 logcat 之后,我认为你在 Inflating RecyclerView 上有第一个异常,然后是 NullPointer 异常。
您是否检查过 libs 文件夹中的 android-support-v7-recyclerview.jar
库?如果是,则检查目标 sdk 版本是否为 21
<uses-sdk
android:minSdkVersion="11" //or anything you need
android:targetSdkVersion="21" />
因为在互联网上尝试了所有方法后,我通过将目标从 17 更改为 21 解决了 recyclerview 膨胀错误。
也许这对将来的某个人有帮助,而不是像我一样浪费时间。
您在 PastEventFragment.java 中缺少 setContentView 指令,我遇到了同样的问题。