2016-11-05 69 views
0

我嘗試了不同的解決方案,但不斷當我啓動應用程序我收到佈局錯誤,謝謝大家的幫助。layoutInflater崩潰在片段java android

適配器:

public class Adattatore_Main extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 

    public final int TYPE_MOVIE = 0; 
    public final int TYPE_LOAD = 1; 
    Context context; 
    List<Variabili_Main> movies; 
    OnLoadMoreListener loadMoreListener; 
    boolean isLoading = false, isMoreDataAvailable = true; 

    /* 
    * isLoading - to set the remote loading and complete status to fix back to back load more call 
    * isMoreDataAvailable - to set whether more data from server available or not. 
    * It will prevent useless load more request even after all the server data loaded 
    * */ 


    public Adattatore_Main(Context context, List<Variabili_Main> movies) { 
     this.context = context; 
     this.movies = movies; 
    } 


    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     LayoutInflater inflater = LayoutInflater.from(context); 
     if(viewType==TYPE_MOVIE){ 
      return new MovieHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.contenitore_post, parent, false)); 
     }else{ 
      return new LoadHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.caricamento, parent, false)); 
     } 
    } 

崩潰這裏:

LayoutInflater inflater = LayoutInflater.from(context); 

主要活動:

public class Main_Post extends Fragment { 
    private static final int MY_PERMISSIONS_REQUEST_READ_CONTACTS = 0; 
    RecyclerView recyclerView; 
    List<Variabili_Main> movies; 
    Adattatore_Main adapter; 
    Api api; 
    String TAG = "MainActivity - "; 
    Context context; 
    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.activitymain_post, container, false); 
     recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view); 
     movies = new ArrayList<>(); 
     adapter = new Adattatore_Main(context, movies); 
     adapter.setLoadMoreListener(new Adattatore_Main.OnLoadMoreListener() { 
      @Override 
      public void onLoadMore() { 

       recyclerView.post(new Runnable() { 
        @Override 
        public void run() { 
         int index = movies.size() - 1; 
         loadMore(index); 
        } 
       }); 
       //Calling loadMore function in Runnable to fix the 
       // java.lang.IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling error 
      } 
     }); 
     recyclerView.setHasFixedSize(true); 
     recyclerView.addItemDecoration(new VerticalLineDecorator(2)); 
     recyclerView.setLayoutManager(new LinearLayoutManager(recyclerView.getContext())); 
     recyclerView.setAdapter(adapter); 
     api = ServiceGenerator.createService(Api.class); 
     load(0); 
     return view; 
    } 

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.support.v7.widget.RecyclerView 
     android:id="@+id/recycler_view" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:scrollbars="vertical" /> 

</LinearLayout> 

調試:

         --------- beginning of crash 
11-05 14:44:24.241 659-659/com.androidbelieve.drawerwithswipetabs E/AndroidRuntime: FATAL EXCEPTION: main 
                        Process: com.androidbelieve.drawerwithswipetabs, PID: 659 
                        java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference 
                         at android.view.LayoutInflater.from(LayoutInflater.java:232) 
                         at com.androidbelieve.drawerwithswipetabs.Adattatore_Main.onCreateViewHolder(Adattatore_Main.java:76) 
                         at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:5464) 
                         at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4689) 
                         at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4599) 
                         at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1988) 
                         at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1384) 
                         at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1347) 
                         at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:574) 
                         at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3003) 
                         at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:2600) 
                         at android.view.View.measure(View.java:19731) 
                         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120) 
                         at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464) 
                         at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1117) 
                         at android.widget.LinearLayout.onMeasure(LinearLayout.java:642) 
                         at android.view.View.measure(View.java:19731) 
                         at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1560) 
                         at android.view.View.measure(View.java:19731) 
                         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120) 
                         at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464) 
                         at android.widget.LinearLayout.measureVertical(LinearLayout.java:758) 
                         at android.widget.LinearLayout.onMeasure(LinearLayout.java:640) 
                         at android.view.View.measure(View.java:19731) 
                         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120) 
                         at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) 
                         at android.view.View.measure(View.java:19731) 
                         at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:1075) 
                         at android.view.View.measure(View.java:19731) 
                         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120) 
                         at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464) 
                         at android.widget.LinearLayout.measureVertical(LinearLayout.java:758) 
                         at android.widget.LinearLayout.onMeasure(LinearLayout.java:640) 
                         at android.view.View.measure(View.java:19731) 
                         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120) 
                         at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) 
                         at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) 
                         at android.view.View.measure(View.java:19731) 
                         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120) 
                         at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464) 
                         at android.widget.LinearLayout.measureVertical(LinearLayout.java:758) 
                         at android.widget.LinearLayout.onMeasure(LinearLayout.java:640) 
                         at android.view.View.measure(View.java:19731) 
                         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120) 
                         at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) 
                         at android.view.View.measure(View.java:19731) 
                         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120) 
                         at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464) 
                         at android.widget.LinearLayout.measureVertical(LinearLayout.java:758) 
                         at android.widget.LinearLayout.onMeasure(LinearLayout.java:640) 
                         at android.view.View.measure(View.java:19731) 
                         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120) 
                         at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) 
11-05 14:44:24.241 659-659/com.androidbelieve.drawerwithswipetabs E/AndroidRuntime:  at com.android.internal.policy.DecorView.onMeasure(DecorView.java:687) 
                         at android.view.View.measure(View.java:19731) 
                         at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2271) 
                         at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1358) 
                         at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1607) 
                         at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1246) 
                         at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6301) 
                         at android.view.Choreographer$CallbackRecord.run(Choreographer.java:871) 
                         at android.view.Choreographer.doCallbacks(Choreographer.java:683) 
                         at android.view.Choreographer.doFrame(Choreographer.java:619) 
                         at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:857) 
                         at android.os.Handler.handleCallback(Handler.java:751) 
                         at android.os.Handler.dispatchMessage(Handler.java:95) 
                         at android.os.Looper.loop(Looper.java:154) 
                         at android.app.ActivityThread.main(ActivityThread.java:6077) 
                         at java.lang.reflect.Method.invoke(Native Method) 
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 


                        --------- beginning of system 

這是代碼的一部分,如果你需要更多的代碼,我在這裏。謝謝。

+1

看起來你從不初始化'Main_Post'中的'context',所以當你實例化'Adattatore_Main'時它是空的。看起來它崩潰的路線是不必要的,因爲你沒有在任何地方使用「inflater」。另外,當你想幫助調試崩潰時,請包括堆棧跟蹤。 –

+0

我附加了調試 –

+0

您的片段中的'context'永遠不會初始化,所以使用'getActivity()'獲取片段中的上下文 –

回答

0

在獲得系統佈局充氣許可權之前,可以對佈局進行充氣。你只是改變你的代碼。其他人認爲,如果你可以看到你的onCreateView()方法,那麼當你初始化你的適配器對象時,你傳遞null上下文對象,這就是爲什麼你的回收視圖接收空上下文。在傳遞適配器對象之前,您需要初始化您的上下文。我希望這將解決您的問題

context = getActivity(); 
adapter = new Adattatore_Main(context, movies); 

然後,修改下面的代碼適配器後

LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
inflater = inflater.from(parent.getContext()).inflate(R.layout.fragment_row, parent ,false); 
+0

java.lang.NullPointerException:嘗試調用虛方法java.lang.Object android.content .Context.getSystemService(java.lang.String)'null對象引用 –

+0

請檢查我更新的答案 – Shailesh

+0

解決!非常感謝! –

0

LayoutInflater inflater = LayoutInflater.from(parent.getcontext()); 

更新

似乎日在你沒有通過適配器的上下文。如果您需要使用片段中的任何上下文,請使用getActivity()。它會解決你的上下文初始化問題。