2015-07-21 41 views
2

我正在關注slidenerd Material design tutorial(Android RecyclerView示例part1,2,3,4)&我正在使用真實設備來測試我的android應用程序。我已成功構建導航抽屜&我嘗試通過添加適配器(ThalakazAdapter.java)將RecylerView添加到它中,不幸的是應用程序停止了。不幸的是,應用程序已停止在Android試圖執行RecylerView

這是我NavigationDrawerFragment.java

package com.thaalakaz.nadeesha.materialdesignapp1; 


import android.content.Context; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
//import android.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.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.support.v4.app.Fragment; 

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

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

    private RecyclerView recyclerView; 
    public static final String PREF_FILE_NAME = "testpref"; 
    public static final String KAY_USER_LEARNED_DRAWER ="user_learned_drawer"; 

    private ActionBarDrawerToggle mDrawerToggle; 
    private DrawerLayout mDrawerLayout; 

    private ThalakazAdapter adapter; 
    private boolean mUserLearnedDrawer; 
    private boolean mFromSavedInstanceState; 
    private View containerView; 

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

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mUserLearnedDrawer=Boolean.valueOf(readFromPreferences(getActivity(),KAY_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); 

     adapter = new ThalakazAdapter(getActivity(),getData()); 
     recyclerView.setAdapter(adapter); 
     recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 
     return layout; 
    } 

    public static List<Information> getData(){ 

     List<Information> data = new ArrayList<>(); 
     int[] icons ={R.drawable.ic_m,R.drawable.ic_m1,R.drawable.ic_m2,R.drawable.ic_m3}; 
     String[] titles = {"Nadeesha","Thilakarathne","Semini","Roshani"}; 

     for (int i=0;i<titles.length && i<icons.length;i++){ 
      Information current = new Information(); 
      current.iconId = icons[i]; 
      current.titlel = titles[i]; 
      data.add(current); 
     } 
     return data; 
    } 
    public void setUp(int fragmentId, DrawerLayout drawerLayout, final Toolbar toolbar) { 

     containerView = getActivity().findViewById(fragmentId); 
     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(!mUserLearnedDrawer){ 
        mUserLearnedDrawer = true; 
        saveToPreferences(getActivity(),KAY_USER_LEARNED_DRAWER,mUserLearnedDrawer+""); 
       } 
       getActivity().invalidateOptionsMenu(); 
      } 

      @Override 
      public void onDrawerClosed(View drawerView) { 
       super.onDrawerClosed(drawerView); 
       getActivity().invalidateOptionsMenu(); 
      } 

      @Override 
      public void onDrawerSlide(View drawerView, float slideOffset) { 

       if (slideOffset<0.6){ 
        toolbar.setAlpha(1-slideOffset); 
       } 

      } 

     }; 

     if (!mUserLearnedDrawer && mFromSavedInstanceState){ 
      mDrawerLayout.openDrawer(containerView); 
     } 
     mDrawerLayout.setDrawerListener(mDrawerToggle); 
     mDrawerLayout.post(new Runnable() { 
      @Override 
      public void run() { 
       mDrawerToggle.syncState(); 
      } 
     }); 
    } 
    public static void saveToPreferences(Context context,String prferenceName,String preferenceValue){ 
     SharedPreferences sharedPreferences = context.getSharedPreferences(PREF_FILE_NAME,Context.MODE_PRIVATE); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putString(prferenceName,preferenceValue); 
     editor.apply(); 
    } 

    public static String readFromPreferences(Context context,String prferenceName,String defaultValue){ 
     SharedPreferences sharedPreferences = context.getSharedPreferences(PREF_FILE_NAME,Context.MODE_PRIVATE); 
     return sharedPreferences.getString(prferenceName,defaultValue); 
    } 
} 

這是我的適配器(ThalakazAdapter.java)

package com.thaalakaz.nadeesha.materialdesignapp1; 

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.ListView; 
import android.widget.TextView; 

import java.util.Collections; 
import java.util.List; 

/** 
* Created by hp on 7/22/2015. 
*/ 
public class ThalakazAdapter extends RecyclerView.Adapter <ThalakazAdapter.myViewHolder>{ 

    private LayoutInflater inflater; 
    List<Information> data = Collections.emptyList(); 

    public ThalakazAdapter(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.titlel); 
     holder.icon.setImageResource(current.iconId); 
    } 



    @Override 
    public int getItemCount() { 

     return 0; 
    } 

    class myViewHolder extends RecyclerView.ViewHolder{ 
     ImageView icon; 
     TextView title; 
     public myViewHolder(View itemView) { 

      super(itemView); 
      title = (TextView) itemView.findViewById(R.id.listText); 
      icon = (ImageView) itemView.findViewById(R.id.listIcon); 

     } 
    } 
} 

我information.java類

package com.thaalakaz.nadeesha.materialdesignapp1; 

/** 
* Created by hp on 7/22/2015. 
*/ 
public class Information { 
    int iconId; 
    String titlel; 
} 

您可以查看我的整個來自here的項目

logcat的

07-21 22:32:07.101 7099-7099/com.thaalakaz.nadeesha.materialdesignapp1 D/dalvikvm﹕ Late-enabling CheckJNI 
07-21 22:32:07.111 7099-7099/com.thaalakaz.nadeesha.materialdesignapp1 I/SystemProperties﹕ get key=ro.kernel.android.tracing 
07-21 22:32:07.281 7099-7099/com.thaalakaz.nadeesha.materialdesignapp1 I/dalvikvm﹕ Could not find method android.view.ViewGroup.onRtlPropertiesChanged, referenced from method android.support.v7.widget.Toolbar.onRtlPropertiesChanged 
07-21 22:32:07.281 7099-7099/com.thaalakaz.nadeesha.materialdesignapp1 W/dalvikvm﹕ VFY: unable to resolve virtual method 14685: Landroid/view/ViewGroup;.onRtlPropertiesChanged (I)V 
07-21 22:32:07.281 7099-7099/com.thaalakaz.nadeesha.materialdesignapp1 D/dalvikvm﹕ VFY: replacing opcode 0x6f at 0x0007 
07-21 22:32:07.301 7099-7099/com.thaalakaz.nadeesha.materialdesignapp1 I/dalvikvm﹕ Could not find method android.content.res.TypedArray.getChangingConfigurations, referenced from method android.support.v7.internal.widget.TintTypedArray.getChangingConfigurations 
07-21 22:32:07.301 7099-7099/com.thaalakaz.nadeesha.materialdesignapp1 W/dalvikvm﹕ VFY: unable to resolve virtual method 414: Landroid/content/res/TypedArray;.getChangingConfigurations()I 
07-21 22:32:07.301 7099-7099/com.thaalakaz.nadeesha.materialdesignapp1 D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002 
07-21 22:32:07.311 7099-7099/com.thaalakaz.nadeesha.materialdesignapp1 I/dalvikvm﹕ Could not find method android.content.res.TypedArray.getType, referenced from method android.support.v7.internal.widget.TintTypedArray.getType 
07-21 22:32:07.311 7099-7099/com.thaalakaz.nadeesha.materialdesignapp1 W/dalvikvm﹕ VFY: unable to resolve virtual method 436: Landroid/content/res/TypedArray;.getType (I)I 
07-21 22:32:07.311 7099-7099/com.thaalakaz.nadeesha.materialdesignapp1 D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002 
07-21 22:32:07.381 7099-7099/com.thaalakaz.nadeesha.materialdesignapp1 D/AndroidRuntime﹕ Shutting down VM 
07-21 22:32:07.381 7099-7099/com.thaalakaz.nadeesha.materialdesignapp1 W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41027208) 
07-21 22:32:07.391 7099-7099/com.thaalakaz.nadeesha.materialdesignapp1 E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.thaalakaz.nadeesha.materialdesignapp1/com.thaalakaz.nadeesha.materialdesignapp1.MainActivity}: android.view.InflateException: Binary XML file line #24: Error inflating class fragment 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
      at android.app.ActivityThread.access$600(ActivityThread.java:123) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:137) 
      at android.app.ActivityThread.main(ActivityThread.java:4424) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:511) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: android.view.InflateException: Binary XML file line #24: Error inflating class fragment 
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:697) 
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:739) 
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:742) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
      at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249) 
      at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106) 
      at com.thaalakaz.nadeesha.materialdesignapp1.MainActivity.onCreate(MainActivity.java:20) 
      at android.app.Activity.performCreate(Activity.java:4465) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
            at android.app.ActivityThread.access$600(ActivityThread.java:123) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
            at android.os.Handler.dispatchMessage(Handler.java:99) 
            at android.os.Looper.loop(Looper.java:137) 
            at android.app.ActivityThread.main(ActivityThread.java:4424) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:511) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554) 
            at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.NullPointerException 
      at com.thaalakaz.nadeesha.materialdesignapp1.NavigationDrawerFragment.onCreateView(NavigationDrawerFragment.java:63) 
      at android.support.v4.app.Fragment.performCreateView(Fragment.java:1789) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:924) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1116) 
      at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1218) 
      at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2170) 
      at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:300) 
      at android.support.v7.app.AppCompatDelegateImplV7.callActivityOnCreateView(AppCompatDelegateImplV7.java:838) 
      at android.support.v7.app.AppCompatDelegateImplV11.callActivityOnCreateView(AppCompatDelegateImplV11.java:34) 
      at android.support.v7.app.AppCompatDelegateImplV7.onCreateView(AppCompatDelegateImplV7.java:826) 
      at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44) 
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:668) 
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:739) 
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:742) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
            at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249) 
            at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106) 
            at com.thaalakaz.nadeesha.materialdesignapp1.MainActivity.onCreate(MainActivity.java:20) 
            at android.app.Activity.performCreate(Activity.java:4465) 
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
            at android.app.ActivityThread.access$600(ActivityThread.java:123) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
            at android.os.Handler.dispatchMessage(Handler.java:99) 
            at android.os.Looper.loop(Looper.java:137) 
            at android.app.ActivityThread.main(ActivityThread.java:4424) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:511) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554) 
            at dalvik.system.NativeStart.main(Native Method) 

fragment_navigation_drawer.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" 
    android:background="#DADADA" 
    tools:context="com.thaalakaz.nadeesha.materialdesignapp1.NavigationDrawerFragment"> 

    <LinearLayout 
     android:id="@+id/containerDrawerImage" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="#FF6F00"> 

     <ImageView 
      android:layout_width="280dp" 
      android:layout_height="140dp" 
      android:src = "@drawable/dog" 
      android:layout_margin="16dp"/> 

    </LinearLayout> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/drawerList" 
     android:layout_height="match_parent" 
     android:layout_width="wrap_content"> 

    </android.support.v7.widget.RecyclerView> 


</RelativeLayout> 
+0

請你能附上logcat的報告.. –

+1

'這.data = this.data;'是錯誤的。 'getItemCount'不應該返回'0' – Blackbelt

+0

@ShadowDroid我添加logcat報告 –

回答

2

在onCreateView你正在尋找錯誤的ID。更改

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

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

我還注意到,在您的Adapter的構造函數,你assingn this.data本身。更改

this.data = this.data; 

this.data = data 

getItemCount不應該return 0,但數據的大小(如果它不爲null)

+0

現在的應用程序正在工作:)。我是一個初學者。謝謝你這麼多,你節省了我的時間 –

+0

不客氣 – Blackbelt

相關問題