2016-11-10 113 views
2

我一起使用片段和recyclerview。我也有数据库,我想查询来自数据库的结果并在活动内部显示结果。片段内空白Recyclerview

但是,每次我尝试运行应用程序并切换到部件以获取并查看结果时,我似乎都没有收到任何东西。没有结果,只是空白。我不知道为什么它没有显示出来。

这是我的全部代码

Sample类

public class Sample extends Fragment { 
    private View rootView; 

    public Sample() {} 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     super.onCreateView(inflater, container, savedInstanceState); 

     rootView = inflater.inflate(sample, container, false); 

     RecyclerView mRecyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerView_sample); 
     mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 
     mRecyclerView.setHasFixedSize(true); 

     DatabaseHandler db= new DatabaseHandler(getActivity()); 
     List<SampleModel> list = db.getResults(); 

     SampleAdapter sampleAdapter = new SampleAdapter(list); 
     mRecyclerView.setAdapter(sampleAdapter); 

     return rootView; 
    } 
} 

适配器类别

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

    private List<SampleModel> list; 
    private Context mContext; 

    public SampleAdapter (List<SampleModel> list) { 
     list = list; 
    } 

    @Override 
    public SampleAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(mContext).inflate(R.layout.sample_item, parent, false); 
     return new ViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(SampleAdapter.ViewHolder holder, int position) { 
     SampleModel sample = list.get(holder.getAdapterPosition()); 
     holder.title.setText(sample.getTitle()) 
    } 

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

    public class ViewHolder extends RecyclerView.ViewHolder { 

     public TextView title; 

     public ViewHolder(View itemView) { 
      super(itemView); 
      title = (TextView) itemView.findViewById(R.id.title); 
     } 
    } 
} 

XML

sample.xml中

<?xml version="1.0" encoding="utf-8"?> 
    <android.support.design.widget.CoordinatorLayout 
     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:fitsSystemWindows="true"> 

     <include layout="@layout/sample_recyclerview" /> 

    </android.support.design.widget.CoordinatorLayout> 

sample_recyclerview.xml

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

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

</RelativeLayout> 

sample_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/cardview" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="10dp" 
    android:layout_marginBottom="10dp" 
    android:layout_marginLeft="16dp" 
    android:layout_marginRight="16dp" 
    android:focusable="true" 
    android:clickable="true" 
    android:foreground="?android:attr/selectableItemBackground" 
    card_view:cardBackgroundColor="#808080"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:padding="16dp"> 

     <TextView 
      android:id="@+id/title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textColor="#ffffff" /> 

    </LinearLayout> 

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

回答

0

在你SampleAdapter变化

list = list; 

this.list = list; 
+0

它仍然没有工作 – BXUMZSE

+0

你真的确定你的'名单列表= db.getResults();'是不是空的? – Enzokie

0

您的Adapter构造函数是错误的。您没有将dataSource传递给您的适配器。更改为

public SampleAdapter (List<SampleModel> list) { 
     this.list = list; 
    } 

此外,您必须通知适配器,您更改了您的dataSource。你这样做,通过调用方法notifyDataSetChanged

SampleAdapter sampleAdapter = new SampleAdapter(list); 
mRecyclerView.setAdapter(sampleAdapter); 
sampleAdapter.notifyDataSetChanged();