私はアクティビティをフラグメントに変更している最中で、RecyclerViewを拡張するとすぐに次のエラーが発生しました。
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
----> View rootView = inflater.inflate(R.layout.layout_containing_recyclerview,
container, false);
Java.lang.IllegalStateException:RecyclerViewにはLayoutManagerがありません
アクティビティをフラグメントに変更する前に、インフレートはうまくいきました。
さらなる調査の結果、recyclerviewレイアウトからすべての子要素を削除するが問題の解決に役立つことがわかりました。しかし、なぜそれが何かを変えるのか、なぜそれが以前の活動で機能したのか理解できません。
[〜#〜]機能[〜#〜]
<Android.support.v7.widget.RecyclerView xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/my_recycler_view"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:clickable="true"
Android:scrollbars="vertical" >
</Android.support.v7.widget.RecyclerView>
機能しません
<Android.support.v7.widget.RecyclerView xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/my_recycler_view"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:clickable="true"
Android:scrollbars="vertical" >
<View
Android:id="@+id/randomview"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center" />
</Android.support.v7.widget.RecyclerView>
ここに欠けているものはありますか?
この質問はかなり古いですが、この問題にまだ直面している人々のために、私は答えを残したいと思いました。私はAndroid開発を学習していて、この問題はイライラさせられました。後で、RecyclerView
の下にビューまたはビューグループを追加するべきではないことがわかりました。 RecyclerView
の下に表示する場合は、独立したリソースファイルで個別に定義する必要があります。
次に、アダプターの実装(_RecyclerView.Adapter<>
_を拡張する実装)で、オーバーライドされたメソッドpublic MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
で、ビューのレイアウトを拡張すると(これにより、リサイクラービューの各アイテムのレイアウトが拡張されます)、上記で作成した個別のレイアウトを指定できます。Android次に、リサイクラービューに追加する必要があるすべてのアイテムに対してこのレイアウトを拡張します。
この記事 は、これを明確に見るのに役立ちました。
Android-parallax-recycleview を使用しようとしたときにも同じ問題が発生しました。
解決策は簡単で、レイアウトマネージャーマネージャーを手動で作成できます。
example-parallaxrecycler からのコードスニペット:
LinearLayoutManager manager = new LinearLayoutManager(this);
manager.setOrientation(LinearLayoutManager.VERTICAL);
myRecycler.setLayoutManager(manager);
RecyclerView
は、子のレイアウトを行うViewGroup
を必要とするLayoutManager
です。あなたの場合、RecyclerView
は子ビューをLayoutManager
に渡す必要がありますが、ビューのxml参照をLayoutManager
に渡すことができるかどうかはわかりません。
その後、次のようにビューを膨らませることになりました。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_catalog_viewer, container, false);
recyclerView = (RecyclerView)rootView.findViewById(R.id.my_recycler_view);
getLayoutInflater(savedInstanceState).inflate(R.layout.catalog_child, container);
return rootView;
}
onCreateView
で初期化しても、依然としてnullポインタ例外が発生します。
プログラムで追加します。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/llContainer"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical" >
<!-- <Android.support.v7.widget.RecyclerView
Android:id="@+id/rvPromotions"
Android:layout_width="match_parent"
Android:layout_height="match_parent" /> -->
</LinearLayout>
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
// create recyclerview
...
LinearLayout llContainer = (LinearLayout) v.findViewById(R.id.llContainer);
llContainer.addView(recyclerView);
return v;
}