새로운 RecyclerView를 엉망으로 만들려고하는데 그것을 실행하려고 할 때마다 내 앱이 즉시 충돌합니다. 에서 메서드에 액세스하려고하면 NullPointerException이 발생합니다 android.support.v7.widget.RecyclerView
. 나는 다른 게시물을 보았고 대부분의 사람들이 가지고 있지 않은 것을 compile 'com.android.support:recyclerview-v7:+'
보았지만 그것을 시도했지만 전혀 도움이되지 않았습니다. 이 시점에서 무엇을 해야할지 잘 모르겠다면 어떤 도움을 주시면 감사하겠습니다. 여기에 오류 로그 : (사진을 게시하지만 아직 10 명의 담당자가 없습니다)
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView$LayoutManager.onMeasure(android.support.v7.widget.RecyclerView$Recycler, android.support.v7.widget.RecyclerView$State, int, int)' on a null object reference
at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:1764)
at android.view.View.measure(View.java:17430)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17430)
at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:851)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2560)
at android.view.View.measure(View.java:17430)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2001)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1166)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1372)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5786)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:550)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
답변
어떤이 경우이 문제는 일반적으로 발생하지 LayoutManager
제공했다 RecyclerView
. 다음과 같이 할 수 있습니다.
final LinearLayoutManager layoutManager = new LinearLayoutManager(context);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
답변
제 경우에는 ‘최종’에 연결되지 않았지만 @aga 답변에 대한 @ NemanjaKovačević 댓글에 언급 된 문제에 연결되었습니다. 데이터로드시 layoutManager를 설정했는데 이것이 동일한 충돌의 원인이었습니다. 내 조각의 onCreateView로 layoutManager 설정을 이동 한 후 문제가 해결되었습니다.
이 같은:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
...
mRecyclerView = (RecyclerView) rootView.findViewById(R.id.recycler);
mLayoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(mLayoutManager);
답변
나에게 동일한 문제가 있었는데, 문제는 xml에 사용되지 않은 RecyclerView가 있고 뷰가 사라졌지 만 Activity의 어댑터에 바인딩하지 않았으므로 문제가 발생했습니다. XML에서 사용하지 않는 리사이클 러 뷰를 제거하자마자 해결되었습니다.
즉-코드에서 호출되지 않았거나 어댑터가 설정 되었기 때문에이 뷰를 제거했습니다.
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/rv_profileview_allactivities"
android:visibility="gone" />
답변
RecyclerView.LayoutManager
제대로 설정 했음에도 불구하고이 충돌을 경험했습니다 . 이 문제를 해결 하려면 RecyclerView
초기화 코드를 onViewCreated(...)
콜백 으로 옮겨야했습니다 .
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_listing, container, false);
rootView.setTag(TAG);
return inflater.inflate(R.layout.fragment_listing, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mLayoutManager = new LinearLayoutManager(getActivity());
mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
mRecyclerView.setLayoutManager(mLayoutManager);
mAdapter = new ListingAdapter(mListing);
mRecyclerView.setAdapter(mAdapter);
}
답변
방법 setLayoutManager
에서 사용해야 합니다 RecyclerView#onCreate()
. recyclerView
보기에 추가하기 전에 LayoutManager
세트 가 있어야합니다 .
private RecyclerView menuAsList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
menuAsList = (RecyclerView) findViewById(R.id.recyclerView_mainMenu);
menuAsList.setLayoutManager(new LinearLayoutManager(Home.this));
}
답변
잘못된 RecyclerView
ID 참조로 인해이 문제가 발생했습니다 .
recyclerView = (RecyclerView) findViewById(R.id.rv_followers_list);
에
recyclerView = (RecyclerView) findViewById(R.id.rv_search_list);
답변
recyclerView =
(RecyclerView) findViewById(R.id.recycler_view2);
리사이클 러 뷰 ID를 확인하고 실제 리사이클 러 뷰를 가리키면 문제가 해결되었습니다.