-1

をクラッシュ私はで見つけチュートリアルのバリエーションを使用してフラグメント、RecycleViewとCardViewをリンクしようとしています: http://www.treyrobinson.net/blog/android-l-tutorials-part-3-recyclerview-and-cardview/アンドロイドスタジオ - ダイナミック断片は、アプリケーション

次のエラーメッセージで残念ながら私のアプリがクラッシュ:

"java.lang.IllegalStateException: RecyclerView has no LayoutManager" 

私はAndroid開発でかなり新しいです。 Stackoverflowで同様の問題を発見しようとしましたが、問題を見つけることができません。どんな助けでも大歓迎です! "activity_library.xml":主な活動の

レイアウト

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".LibraryActivity"> 
    <android.support.v7.widget.RecyclerView 
     android:id="@+id/library_activity_recycler_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     tools:context=".LibraryActivity" 
     /> 
</RelativeLayout> 

主活動クラス "LibraryActivity.java":

import android.app.FragmentManager; 
import android.app.FragmentTransaction; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 

public class LibraryActivity extends AppCompatActivity{ 
    private static final String TAG = LibraryActivity.class.getSimpleName(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); /**Create the activity and populate the savedInstanceState if the activity existed but has been destroyed (otherwise savedInstanceState will return 'null'*/ 
     setContentView(R.layout.activity_library); /** Call to the XML layout library which display the activity */ 

     if (savedInstanceState != null) { 
      // Restore value of members from saved state 
     } else { 
      // Probably initialize members with default values for a new instance 
     } 

     try { 
      FragmentManager fragmentManager = getFragmentManager(); 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      BooksFragment bookFragment = new BooksFragment(); 
      fragmentTransaction.add(R.id.library_activity_recycler_view,bookFragment); 


      /*The line below is the one generating the error - java.lang.IllegalStateException: RecyclerView has no LayoutManager*/ 
      fragmentTransaction.commit(); 

     } 
     catch(Exception e){ 
      Log.d(TAG,"[ERROR] " + e.getMessage()); 
     } 
    } 
} 

断片「fragment_booksのレイアウト。 xml ":

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 
    <android.support.v7.widget.RecyclerView 
     android:id="@+id/Book_Recycler_View" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
    </android.support.v7.widget.RecyclerView> 
</LinearLayout> 

そして、断片クラス:

import android.app.Fragment; 
import android.os.Bundle; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 


public class BooksFragment extends Fragment { 

    public BooksFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.activity_library, container, false); 
     LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()); 
     layoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
     RecyclerView bookRecycler = (RecyclerView) v.findViewById(R.id.library_activity_recycler_view); 
     bookRecycler.setLayoutManager(layoutManager); 
     BookRecyclerViewAdapter adapter = new BookRecyclerViewAdapter(); 
     bookRecycler.setAdapter(adapter); 
     /*In the line below should we return the view 'v' or the RecyclerView 'bookRecycler'??*/ 
     return bookRecycler; 
    } 
} 

私が言ったように、Androidにはかなり新しいので、私のコードにはかなりの誤りが含まれています。ご協力いただきありがとうございます!

参考のために完全なエラーログ:

04-18 14:04:52.323 11225-11225/com.wldtaster.tellmeastory E/AndroidRuntime: FATAL EXCEPTION: main 
     Process: com.wldtaster.tellmeastory, PID: 11225 
     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.wldtaster.tellmeastory/com.wldtaster.tellmeastory.LibraryActivity}: java.lang.IllegalStateException: RecyclerView has no LayoutManager 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
      at android.app.ActivityThread.access$800(ActivityThread.java:151) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5254) 
      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:903) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
     Caused by: java.lang.IllegalStateException: RecyclerView has no LayoutManager 
      at android.support.v7.widget.RecyclerView.generateLayoutParams(RecyclerView.java:3393) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
      at com.wldtaster.tellmeastory.BooksFragment.onCreateView(BooksFragment.java:23) 
      at android.app.Fragment.performCreateView(Fragment.java:2053) 
      at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:894) 
      at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
      at android.app.BackStackRecord.run(BackStackRecord.java:834) 
      at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1452) 
      at android.app.Activity.performStart(Activity.java:6005) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)  
      at android.app.ActivityThread.access$800(ActivityThread.java:151)  
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)  
      at android.os.Handler.dispatchMessage(Handler.java:102)  
      at android.os.Looper.loop(Looper.java:135)  
      at android.app.ActivityThread.main(ActivityThread.java:5254)  
      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:903)  
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)  
+0

、RecyclerViewではなく、activity_library.xml内では、フラグメントトランザクションのコンテナとしてFrameLayoutを使用します。フラグメントクラスの – Dharmaraj

+0

では、アクティビティのレイアウトを使用します。フラグメントレイアウトで変更してください。 – kagkar

+0

あなたの返信ありがとう! ActivityLibrary.xmlでRecyclerViewをFrameLayoutで変更したとき、次のエラーメッセージ "java.lang.ClassCastException:android.support.v7.widget.RecyclerViewにandroid.support.v7.widget.FrameLayoutをキャストできません"が表示されます。問題を解決していないようですか? BooksFragmentの –

答えて

3

あなたは、ビューつまりを返さなければなりません。 FragmentonCreateViewメソッドのvを継承します。