1

我在搜索類似的問題,發現人們或者沒有編寫Recycler View的編譯依賴項,或者他們沒有在代碼中提到正確的id,在xml中使用,或者他們在onCreateViewHolder中返回null。我一定不要重複這些錯誤,但應用程序仍然崩潰。有人可以幫助我,我對Android開發非常陌生。我的代碼顯示錯誤膨脹類的片段,爲回收視圖。這是我的代碼,Adapter類和我使用的所有xml文件

適配器類:

package com.example.sayan.materialtoolbar; 

import android.content.Context; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.TextView; 
import java.util.Collections; 
import java.util.List; 

/** 
* Created by SAYAN on 21-02-2016. 
*/ 
public class AppAdaptor extends RecyclerView.Adapter<AppAdaptor.myViewHolder> { 
    private LayoutInflater inflater; 
    List<Information> data= Collections.emptyList(); 

    public AppAdaptor(Context context, List<Information> data){ 
     inflater=LayoutInflater.from(context); 
     this.data=data; 
    } 
    @Override 
    public myViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view=inflater.inflate(R.layout.custom_row, parent,false); 
     myViewHolder holder=new myViewHolder(view); 
     return holder; 
    } 

    @Override 
    public void onBindViewHolder(myViewHolder holder, int position) { 
     Information current=data.get(position); 
     holder.title.setText(current.title); 
     holder.icon.setImageResource(current.iconId); 
    } 

    @Override 
    public int getItemCount() { 
     return data.size(); 
    } 

    class myViewHolder extends RecyclerView.ViewHolder { 
     TextView title; 
     ImageView icon; 
     public myViewHolder(View itemView) { 
      super(itemView); 
      title= (TextView) itemView.findViewById(R.id.listText); 
      icon= (ImageView) itemView.findViewById(R.id.listIcon); 

     } 
    } 
} 

類,用於存儲所述數據:

package com.example.sayan.materialtoolbar; 

/** 
* Created by SAYAN on 21-02-2016. 
*/ 
public class Information { 
    int iconId; 
    String title; 
} 

抽屜式導航片段

package com.example.sayan.materialtoolbar; 


import android.content.Context; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.support.v7.widget.Toolbar; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import java.util.ArrayList; 
import java.util.List; 


/** 
* A simple {@link Fragment} subclass. 
*/ 
public class NavigationDrawerFragment extends Fragment { 

    private static final String PREF_FILE_NAME ="testpref" ; 
    private static final String KEY_USER_LEARNED_DRAWER ="user_learned_drawer" ; 
    private ActionBarDrawerToggle mDrawerToggle; 
    private DrawerLayout mDrawerLayout; 
    private boolean mUserLearned; 
    private boolean mFromSavedInstanceState; 
    private View containerView; 

    private RecyclerView recyclerView; 
    private AppAdaptor adaptor; 

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

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     readFromPreferences(getActivity(), KEY_USER_LEARNED_DRAWER, "false"); 
     mUserLearned=Boolean.valueOf(readFromPreferences(getActivity(), KEY_USER_LEARNED_DRAWER, "false")); 
     if(savedInstanceState!=null) 
      mFromSavedInstanceState=true; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View layout=inflater.inflate(R.layout.fragment_navigation_drawer, container, false); 
     recyclerView= (RecyclerView) layout.findViewById(R.id.drawer_layout); 
     adaptor=new AppAdaptor(getActivity(),getData()); 
     recyclerView.setAdapter(adaptor); 
     recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 
     return layout; 
    } 


    public void setUp(int fragmnentId, DrawerLayout drawerLayout, final Toolbar toolbar) { 
     containerView=getActivity().findViewById(fragmnentId); 
     mDrawerLayout=drawerLayout; 
     mDrawerToggle=new ActionBarDrawerToggle(getActivity(),drawerLayout,toolbar,R.string.drawer_open,R.string.drawer_close){ 
      @Override 
      public void onDrawerOpened(View drawerView) { 
       super.onDrawerOpened(drawerView); 
       if(mFromSavedInstanceState){ 
        mUserLearned=true; 
        saveToPreferences(getActivity(),KEY_USER_LEARNED_DRAWER,mUserLearned+""); 
       } 
       getActivity().invalidateOptionsMenu(); 
      } 

      @Override 
      public void onDrawerClosed(View drawerView) { 
       super.onDrawerClosed(drawerView); 
       getActivity().invalidateOptionsMenu(); 
      } 
     }; 
     if(!mUserLearned && !mFromSavedInstanceState) 
      mDrawerLayout.openDrawer(containerView); 
     mDrawerLayout.setDrawerListener(mDrawerToggle); 

     mDrawerLayout.post(new Runnable() { 
      @Override 
      public void run() { 
       mDrawerToggle.syncState(); 
      } 
     }); 
    } 
    public void saveToPreferences(Context context, String preferenceName, String preferenceValue){ 
     SharedPreferences sharedPreferences =context.getSharedPreferences(PREF_FILE_NAME,Context.MODE_PRIVATE); 
     SharedPreferences.Editor editor=sharedPreferences.edit(); 
     editor.putString(preferenceName, preferenceValue); 
     editor.apply(); 
    } 
    public static String readFromPreferences(Context context, String preferenceName, String defaultValue){ 
     SharedPreferences sharedPreferences=context.getSharedPreferences(PREF_FILE_NAME,Context.MODE_PRIVATE); 
     return sharedPreferences.getString(preferenceName,defaultValue); 
    } 
    public static List<Information> getData(){ 
     List<Information> data=new ArrayList<>(); 
     int[] icons={R.drawable.ic_book_black_36dp,R.drawable.ic_book_black_36dp,R.drawable.ic_book_black_36dp,R.drawable.ic_book_black_36dp}; 
     String[] titles={"Academic Details","Live Shows","Recorded Songs","Paper publications"}; 
     for(int i=0; i<icons.length && i<titles.length; i++) 
     { 
      Information current=new Information(); 
      current.iconId=icons[i]; 
      current.title=titles[i]; 
      data.add(current); 
     } 
     return data; 
    } 
} 

custom_row XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageView 
     android:layout_width="@dimen/icon_width" 
     android:layout_height="@dimen/list_height" 
     android:src="@drawable/ic_book_black_36dp" 
     android:id="@+id/listIcon" 
     android:paddingBottom="16dp" 
     android:paddingTop="16dp" 
     android:layout_gravity="center" /> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="@dimen/list_height" 
     android:text="Dummy text" 
     android:id="@+id/listText" 
     android:textSize="14sp" 
     android:paddingBottom="16dp" 
     android:paddingTop="16dp" 
     android:layout_gravity="center" /> 
</LinearLayout> 

錯誤的logcat

02-22 11:35:19.908 21466-21466/? E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.example.sayan.materialtoolbar, PID: 21466 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.sayan.materialtoolbar/com.example.sayan.materialtoolbar.MainActivity}: android.view.InflateException: Binary XML file line #22: Binary XML file line #22: Error inflating class fragment 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2426) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490) 
      at android.app.ActivityThread.-wrap11(ActivityThread.java) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:148) 
      at android.app.ActivityThread.main(ActivityThread.java:5443) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
    Caused by: android.view.InflateException: Binary XML file line #22: Binary XML file line #22: Error inflating class fragment 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:539) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
      at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:256) 
      at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:109) 
      at com.example.sayan.materialtoolbar.MainActivity.onCreate(MainActivity.java:18) 
      at android.app.Activity.performCreate(Activity.java:6245) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1130) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490) 
            at android.app.ActivityThread.-wrap11(ActivityThread.java) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:148) 
            at android.app.ActivityThread.main(ActivityThread.java:5443) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
    Caused by: android.view.InflateException: Binary XML file line #22: Error inflating class fragment 
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:782) 
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:835) 
      at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) 
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:838) 
      at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:515) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
            at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:256) 
            at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:109) 
            at com.example.sayan.materialtoolbar.MainActivity.onCreate(MainActivity.java:18) 
            at android.app.Activity.performCreate(Activity.java:6245) 
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1130) 
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490) 
            at android.app.ActivityThread.-wrap11(ActivityThread.java) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:148) 
            at android.app.ActivityThread.main(ActivityThread.java:5443) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setAdapter(android.support.v7.widget.RecyclerView$Adapter)' on a null object reference 
      at com.example.sayan.materialtoolbar.NavigationDrawerFragment.onCreateView(NavigationDrawerFragment.java:57) 
      at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1036) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1226) 
      at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1328) 
      at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2284) 
      at android.support.v4.app.FragmentController.onCreateView(FragmentController.java:111) 
      at android.support.v4.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:314) 
      at android.support.v4.app.BaseFragmentActivityHoneycomb.onCreateView(BaseFragmentActivityHoneycomb.java:31) 
      at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:79) 
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:754) 
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:835) 
            at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) 
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:838) 
            at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:515) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
            at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:256) 
            at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:109) 
            at com.example.sayan.materialtoolbar.MainActivity.onCreate(MainActivity.java:18) 
            at android.app.Activity.performCreate(Activity.java:6245) 
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1130) 
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490) 
            at android.app.ActivityThread.-wrap11(ActivityThread.java) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:148) 
            at android.app.ActivityThread.main(ActivityThread.java:5443) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
+1

您發佈的一切,除了類有錯誤 –

+0

此行重新可能出錯cyclerView =(RecyclerView)layout.findViewById(R.id.drawer_layout); ,是您的recyclerview ID真的drawer_layout –

+0

我打電話給錯誤的回收站視圖ID。 –

回答

0

U的指定recyclerview錯誤ID:

變化

recyclerView= (RecyclerView) layout.findViewById(R.id.drawer_layout); 

recyclerView= (RecyclerView) layout.findViewById(R.id.your_recyclerview_id); 
+0

非常感謝,我打電話給錯誤的回收站查看ID –

+0

,請立即註冊並將其標記爲已接受 –

相關問題