CardView Recycler 无法使用我的列表<SomeModel>

CardView Recycler is not working with my List<SomeModel>

帮我解决这个问题,我在我的 logcat 上试过了,似乎来自 DatabaseListFragment 的行在设置适配器时给我一个错误:

recyclerView.setAdapter(adapter); // THE ERROR GOES HERE

还是我的 RecyclerAdapter 出错了?

这是我的 activity 作为 DatabaseListFragment

public class DatabaseListFragment extends Fragment {
   private DatabaseAccess db;

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

   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
       db = DatabaseAccess.getInstance(getActivity().getApplicationContext());
       db.open();
       List<TranslateModel> quotes = db.getAllTranslations();
       db.close();
       //View header = inflater.inflate(R.layout.listview_header_row, null);
       View view = inflater.inflate(R.layout.listview_item_row, container, false);

       RecyclerView recyclerView = (RecyclerView)view.findViewById(R.id.listView);
       RecyclerAdapter adapter = new RecyclerAdapter(getActivity(), quotes);
       recyclerView.setAdapter(adapter); // THE ERROR GOES HERE
       recyclerView.setHasFixedSize(true);
       recyclerView.setLayoutManager(new LinearLayoutManager(getActivity().getApplicationContext()));
       return view;
   }
}

listview_item_row.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dp">

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/lang_list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="5dp"
    card_view:cardCornerRadius="5dp">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/icon_lang"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_margin="5dp"
            android:background="@drawable/circular_textview"
            android:fontFamily="sans-serif-thin"
            android:gravity="center"
            android:text="SA"
            android:textAllCaps="true"
            android:textColor="#FFF"
            android:textSize="32sp" />

        <TextView
            android:id="@+id/txtID"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:layout_toRightOf="@id/icon_lang"
            android:paddingLeft="5dp"
            android:paddingRight="5dp"
            android:paddingTop="10dp"
            android:text="Starting Android"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/txtArabic"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/txtID"
            android:layout_marginLeft="5dp"
            android:layout_marginTop="5dp"
            android:layout_toRightOf="@id/icon_lang"
            android:padding="5dp"
            android:text="arab" />
        <TextView
            android:id="@+id/txtEnglish"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/txtID"
            android:layout_marginLeft="5dp"
            android:layout_marginTop="5dp"
            android:layout_toRightOf="@id/txtArabic"
            android:padding="5dp"
            android:text="english" />

        <TextView
            android:id="@+id/txtStructure"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/txtID"
            android:layout_marginLeft="5dp"
            android:layout_marginTop="5dp"
            android:layout_toRightOf="@id/txtEnglish"
            android:padding="5dp"
            android:text="structure" />
    </RelativeLayout>
</android.support.v7.widget.CardView>

我的型号:

public class TranslateModel {

//private variables
public int _id;
public String _english;
public String _arabic;
public  String _structure;

// Empty constructor
public TranslateModel(){

}
// constructor
public TranslateModel(int id, String english, String arabic, String structure){
    this._id = id;
    this._english = english;
    this._arabic = arabic;
    this._structure = structure;
}

// constructor
public TranslateModel(int id, String english, String _arabic){
    this._id = id;
    this._english = english;
    this._arabic = _arabic;
}

和我的RecyclerAdapter.java

public class RecyclerAdapter extends  RecyclerView.Adapter<RecyclerViewHolder> {

List<TranslateModel> mTModel;
Context context;

LayoutInflater inflater;
public RecyclerAdapter(Context context, List<TranslateModel> tModel) {
    this.context = context;
    inflater = LayoutInflater.from(context);
    mTModel = tModel;
}

@Override
public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = inflater.inflate(R.layout.listview_item_row, parent, false);
    RecyclerViewHolder viewHolder = new RecyclerViewHolder(v);
    return viewHolder;
}

@Override
public void onBindViewHolder(RecyclerViewHolder holder, int position) {

    // Get the data model based on position
    TranslateModel translate = mTModel.get(position);
    //holder._id.setText(name[position]);
    holder._id.setText(translate._id);
    holder._arabic.setText(translate._arabic);
    holder._english.setText(translate._english);
    holder._structure.setText(translate._structure);

    holder._icon.setText(translate._id);

    holder._icon.setOnClickListener(clickListener);
    holder.imageView.setTag(holder);
}

private View.OnClickListener clickListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        RecyclerViewHolder vholder = (RecyclerViewHolder) v.getTag();
        int position = vholder.getPosition();

        Toast.makeText(context,"This is position " + position, Toast.LENGTH_LONG ).show();
    }
};

@Override
public int getItemCount() {
    return (null != mTModel ? mTModel.size() : 0);
}
}

编辑: 这是我的日志...错误从这里开始...

    I/dalvikvm: DexOpt: illegal method access (call Landroid/support/v4/app/Fragment;.performSaveInstanceState (Landroid/os/Bundle;)V from Lcom/eng/arab/tranlator/androidtranslator/fragment/DatabaseListFragment;)
I/dalvikvm: Could not find method android.support.v4.app.Fragment.performSaveInstanceState, referenced from method com.eng.arab.tranlator.androidtranslator.fragment.DatabaseListFragment.access$super
W/dalvikvm: VFY: unable to resolve virtual method 5126: Landroid/support/v4/app/Fragment;.performSaveInstanceState (Landroid/os/Bundle;)V
D/dalvikvm: VFY: replacing opcode 0x6f at 0x0073
I/dalvikvm: DexOpt: illegal method access (call Landroid/support/v4/app/Fragment;.restoreViewState (Landroid/os/Bundle;)V from Lcom/eng/arab/tranlator/androidtranslator/fragment/DatabaseListFragment;)
I/dalvikvm: Could not find method android.support.v4.app.Fragment.restoreViewState, referenced from method com.eng.arab.tranlator.androidtranslator.fragment.DatabaseListFragment.access$super
W/dalvikvm: VFY: unable to resolve virtual method 5132: Landroid/support/v4/app/Fragment;.restoreViewState (Landroid/os/Bundle;)V
D/dalvikvm: VFY: replacing opcode 0x6f at 0x0095
I/dalvikvm: DexOpt: illegal method access (call Landroid/support/v4/app/Fragment;.performCreateView (Landroid/view/LayoutInflater;Landroid/view/ViewGroup;Landroid/os/Bundle;)Landroid/view/View; from Lcom/eng/arab/tranlator/androidtranslator/fragment/DatabaseListFragment;)
I/dalvikvm: Could not find method android.support.v4.app.Fragment.performCreateView, referenced from method com.eng.arab.tranlator.androidtranslator.fragment.DatabaseListFragment.access$super
W/dalvikvm: VFY: unable to resolve virtual method 5113: Landroid/support/v4/app/Fragment;.performCreateView (Landroid/view/LayoutInflater;Landroid/view/ViewGroup;Landroid/os/Bundle;)Landroid/view/View;
D/dalvikvm: VFY: replacing opcode 0x6f at 0x00d3
I/dalvikvm: DexOpt: illegal method access (call Landroid/support/v4/app/Fragment;.performPrepareOptionsMenu (Landroid/view/Menu;)Z from Lcom/eng/arab/tranlator/androidtranslator/fragment/DatabaseListFragment;)
I/dalvikvm: Could not find method android.support.v4.app.Fragment.performPrepareOptionsMenu, referenced from method com.eng.arab.tranlator.androidtranslator.fragment.DatabaseListFragment.access$super
W/dalvikvm: VFY: unable to resolve virtual method 5123: Landroid/support/v4/app/Fragment;.performPrepareOptionsMenu (Landroid/view/Menu;)Z
D/dalvikvm: VFY: replacing opcode 0x6f at 0x00e1
I/dalvikvm: DexOpt: illegal method access (call Landroid/support/v4/app/Fragment;.performStop ()V from Lcom/eng/arab/tranlator/androidtranslator/fragment/DatabaseListFragment;)
I/dalvikvm: Could not find method android.support.v4.app.Fragment.performStop, referenced from method com.eng.arab.tranlator.androidtranslator.fragment.DatabaseListFragment.access$super
W/dalvikvm: VFY: unable to resolve virtual method 5128: Landroid/support/v4/app/Fragment;.performStop ()V
D/dalvikvm: VFY: replacing opcode 0x6f at 0x00f7
I/dalvikvm: DexOpt: illegal method access (call Landroid/support/v4/app/Fragment;.performCreateOptionsMenu (Landroid/view/Menu;Landroid/view/MenuInflater;)Z from Lcom/eng/arab/tranlator/androidtranslator/fragment/DatabaseListFragment;)
I/dalvikvm: Could not find method android.support.v4.app.Fragment.performCreateOptionsMenu, referenced from method com.eng.arab.tranlator.androidtranslator.fragment.DatabaseListFragment.access$super
W/dalvikvm: VFY: unable to resolve virtual method 5112: Landroid/support/v4/app/Fragment;.performCreateOptionsMenu (Landroid/view/Menu;Landroid/view/MenuInflater;)Z
D/dalvikvm: VFY: replacing opcode 0x6f at 0x011d
I/dalvikvm: DexOpt: illegal method access (call Landroid/support/v4/app/Fragment;.performOptionsItemSelected (Landroid/view/MenuItem;)Z from Lcom/eng/arab/tranlator/androidtranslator/fragment/DatabaseListFragment;)
I/dalvikvm: Could not find method android.support.v4.app.Fragment.performOptionsItemSelected, referenced from method com.eng.arab.tranlator.androidtranslator.fragment.DatabaseListFragment.access$super
W/dalvikvm: VFY: unable to resolve virtual method 5119: Landroid/support/v4/app/Fragment;.performOptionsItemSelected (Landroid/view/MenuItem;)Z
D/dalvikvm: VFY: replacing opcode 0x6f at 0x020d
I/dalvikvm: DexOpt: illegal method access (call Landroid/support/v4/app/Fragment;.performDetach ()V from Lcom/eng/arab/tranlator/androidtranslator/fragment/DatabaseListFragment;)
I/dalvikvm: Could not find method android.support.v4.app.Fragment.performDetach, referenced from method com.eng.arab.tranlator.androidtranslator.fragment.DatabaseListFragment.access$super
W/dalvikvm: VFY: unable to resolve virtual method 5116: Landroid/support/v4/app/Fragment;.performDetach ()V
D/dalvikvm: VFY: replacing opcode 0x6f at 0x0255
I/dalvikvm: DexOpt: illegal method access (call Landroid/support/v4/app/Fragment;.performMultiWindowModeChanged (Z)V from Lcom/eng/arab/tranlator/androidtranslator/fragment/DatabaseListFragment;)
I/dalvikvm: Could not find method android.support.v4.app.Fragment.performMultiWindowModeChanged, referenced from method com.eng.arab.tranlator.androidtranslator.fragment.DatabaseListFragment.access$super
W/dalvikvm: VFY: unable to resolve virtual method 5118: Landroid/support/v4/app/Fragment;.performMultiWindowModeChanged (Z)V
D/dalvikvm: VFY: replacing opcode 0x6f at 0x02d9
I/dalvikvm: DexOpt: illegal method access (call Landroid/support/v4/app/Fragment;.performConfigurationChanged (Landroid/content/res/Configuration;)V from Lcom/eng/arab/tranlator/androidtranslator/fragment/DatabaseListFragment;)
I/dalvikvm: Could not find method android.support.v4.app.Fragment.performConfigurationChanged, referenced from method com.eng.arab.tranlator.androidtranslator.fragment.DatabaseListFragment.access$super
W/dalvikvm: VFY: unable to resolve virtual method 5109: Landroid/support/v4/app/Fragment;.performConfigurationChanged (Landroid/content/res/Configuration;)V
D/dalvikvm: VFY: replacing opcode 0x6f at 0x0313
I/dalvikvm: DexOpt: illegal method access (call Landroid/support/v4/app/Fragment;.performResume ()V from Lcom/eng/arab/tranlator/androidtranslator/fragment/DatabaseListFragment;)
I/dalvikvm: Could not find method android.support.v4.app.Fragment.performResume, referenced from method com.eng.arab.tranlator.androidtranslator.fragment.DatabaseListFragment.access$super
W/dalvikvm: VFY: unable to resolve virtual method 5125: Landroid/support/v4/app/Fragment;.performResume ()V
D/dalvikvm: VFY: replacing opcode 0x6f at 0x0385
Disconnected from the target VM, address: 'localhost:9662', transport: 'socket'`

嗯.. 你应该 post 你的 Logcat 有错误。

但是,一个错误是在设置 LayoutManager

之前调用 setAdapter()

因此,尝试按如下方式更新您的代码:

recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

recyclerView.setAdapter(adapter); // THE ERROR GOES HERE