2

我嘗試使用RecyclerView時出現問題。該應用在發佈時直接崩潰。RecyclerView應用崩潰

這裏是logcat中的錯誤:

`Process: com.test.alvar.temadagar, PID: 14522 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test.alvar.temadagar/com.test.alvar.temadagar.Temadagar} : android.view.InflateException: Binary XML file line #182: Error inflating class RecyclerView 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2198) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257) 
     at android.app.ActivityThread.access$800(ActivityThread.java:139) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:136) 
     at android.app.ActivityThread.main(ActivityThread.java:5086) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
     at dalvik.system.NativeStart.main(Native Method) 
Caused by: android.view.InflateException: Binary XML file line #182: Error inflating class RecyclerView 
     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:707) 
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) 
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
     at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249) 
     at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106) 
     at com.test.alvar.temadagar.Temadagar.onCreate(Temadagar.java:73) 
     at android.app.Activity.performCreate(Activity.java:5248) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257) 
at android.app.ActivityThread.access$800(ActivityThread.java:139) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:136) 
at android.app.ActivityThread.main(ActivityThread.java:5086) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
at  com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
 at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.view.RecyclerView" on path: DexPathList[[zip file "/data/app/com.test.alvar.temadagar-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.test.alvar.temadagar-2, /vendor/lib, /system/lib]] 
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:497) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:457) 
at android.view.LayoutInflater.createView(LayoutInflater.java:559) 
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:652) 
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66) 
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249) 
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106) 
at com.test.alvar.temadagar.Temadagar.onCreate(Temadagar.java:73) 
at android.app.Activity.performCreate(Activity.java:5248) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162) 
 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257) 
at android.app.ActivityThread.access$800(ActivityThread.java:139) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:136) 
at android.app.ActivityThread.main(ActivityThread.java:5086) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
at dalvik.system.NativeStart.main(Native Method)` 

</pre> 

Temadagar.java(主要業務)

package com.test.alvar.temadagar; 

import android.os.Build; 
import android.os.Bundle; 
import android.support.v4.app.ActivityOptionsCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 

import java.util.ArrayList; 

import android.os.StrictMode; 
import android.util.Log; 

public class Temadagar extends AppCompatActivity { 


private RecyclerView mRecyclerView; 
private RecyclerView.Adapter mAdapter; 
private RecyclerView.LayoutManager mLayoutManager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_temadagar); 
    StrictMode.enableDefaults(); //STRICT MODE ENABLED 


    mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); 
    mRecyclerView.setHasFixedSize(true); 
    mLayoutManager = new LinearLayoutManager(this); 
    mRecyclerView.setLayoutManager(mLayoutManager); 
    mAdapter = new MyRecyclerViewAdapter(getDataSet()); 
    mRecyclerView.setAdapter(mAdapter); 


} 


@Override 
protected void onResume() { 
    super.onResume(); 
    ((MyRecyclerViewAdapter) mAdapter).setOnItemClickListener(new 
     MyRecyclerViewAdapter.MyClickListener() { 
      @Override 
      public void onItemClick(int position, View v) { 
       // Log.i(LOG_TAG, " Clicked on Item " + position); 
      } 
     }); 
} 

private ArrayList<DataObject> getDataSet() { 
    ArrayList results = new ArrayList<DataObject>(); 
    for (int index = 0; index < 20; index++) { 
     DataObject obj = new DataObject("Some Primary Text " + index, 
       "Secondary " + index); 
     results.add(index, obj); 
    } 

    return results; 
} 

}  

DataObject.java

package com.test.alvar.temadagar; 

public class DataObject { 

private String mText1; 
private String mText2; 

DataObject (String text1, String text2){ 
    mText1 = text1; 
    mText2 = text2; 
} 

public String getmText1() { 
    return mText1; 
} 

public void setmText1(String mText1) { 
    this.mText1 = mText1; 
} 

public String getmText2() { 
    return mText2; 
} 

public void setmText2(String mText2) { 
    this.mText2 = mText2; 
} 
} 

MyRecyclerViewAdapter.java

package com.test.alvar.temadagar; 

import android.support.v7.widget.RecyclerView; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

import java.util.ArrayList; 

public class MyRecyclerViewAdapter extends RecyclerView 
    .Adapter<MyRecyclerViewAdapter 
    .DataObjectHolder> { 
private static String LOG_TAG = "MyRecyclerViewAdapter"; 
private ArrayList<DataObject> mDataset; 
private static MyClickListener myClickListener; 

public static class DataObjectHolder extends RecyclerView.ViewHolder 
     implements View 
     .OnClickListener { 
    TextView label; 
    TextView dateTime; 

    public DataObjectHolder(View itemView) { 
     super(itemView); 
     label = (TextView) itemView.findViewById(R.id.textView); 
     dateTime = (TextView) itemView.findViewById(R.id.textView2); 
     Log.i(LOG_TAG, "Adding Listener"); 
     itemView.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     myClickListener.onItemClick(getPosition(), v); 
    } 
} 

public void setOnItemClickListener(MyClickListener myClickListener) { 
    this.myClickListener = myClickListener; 
} 

public MyRecyclerViewAdapter(ArrayList<DataObject> myDataset) { 
    mDataset = myDataset; 
} 

@Override 
public DataObjectHolder onCreateViewHolder(ViewGroup parent, 
              int viewType) { 
    View view = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.list_item, parent, false); 

    DataObjectHolder dataObjectHolder = new DataObjectHolder(view); 
    return dataObjectHolder; 
} 

@Override 
public void onBindViewHolder(DataObjectHolder holder, int position) { 
    holder.label.setText(mDataset.get(position).getmText1()); 
    holder.dateTime.setText(mDataset.get(position).getmText2()); 
} 

public void addItem(DataObject dataObj, int index) { 
    mDataset.add(dataObj); 
    notifyItemInserted(index); 
} 

public void deleteItem(int index) { 
    mDataset.remove(index); 
    notifyItemRemoved(index); 
} 

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

public interface MyClickListener { 
    public void onItemClick(int position, View v); 
} 
} 

list_item.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:background="?android:attr/selectableItemBackground" 
android:orientation="vertical"> 

<TextView 
    android:id="@+id/textView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingTop="5dp" 
    android:text="Large Text" 
    android:textAppearance="?android:attr/textAppearanceLarge" /> 

<TextView 
    android:id="@+id/textView2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:paddingBottom="5dp" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:text="Small Text" 
    android:textAppearance="?android:attr/textAppearanceSmall" /> 
</LinearLayout> 

activity_temdagar.xml(主)

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

<RecyclerView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/coming_text" 
    android:id="@+id/my_recycler_view"/> 

</RelativeLayout> 

回答

4

你在你的activity_temdagar.xml,不<RecyclerView使用<android.support.v7.widget.RecyclerView。該小部件只是支持庫的一部分

+0

好的,該應用程序不再崩潰。但RecyclerView中沒有數據,看不到它 – alvarlagerlof

+0

擺脫'android:layout_below =「@ + id/coming_text」'。並在list_item.xml中使'android:layout_height =「wrap_content」'而不是'android:layout_height =「match_parent」' – Blackbelt

+0

並擺脫'android:background =「?android:attr/selectableItemBackground」' – Blackbelt