1.在string.xml中添加下列语句
<string name="empty_crime_set">没有记录可以显示</string>
2.修改fragment_crime_list.xml中的代码
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/crime_relative_layout">
<android.support.v7.widget.RecyclerView
android:id="@+id/crime_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:icon="@drawable/ic_menu_add"/>
<TextView
android:id="@+id/crime_set_empty_text_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:textSize="20sp"
android:text="@string/empty_crime_set"/>
</RelativeLayout>
3.在 CrimeListFragment 中引用该 TextView,并设置和添加 Crime 菜单选项相同的 ClickListener 的内容。
public class CrimeListFragment extends Fragment {
private TextView mTextView;
....
private class CrimeHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
private TextView mTextView;
public CrimeHolder(View itemView){
super(itemView);
itemView.setOnClickListener(this);
mTitleTextView=(TextView)itemView.findViewById(R.id.list_item_crime_title_text_view);
mDateTextView=(TextView)itemView.findViewById(R.id.list_item_crime_date_text_view);
mSolvedCheckBox=(CheckBox)itemView.findViewById(R.id.list_item_crime_solved_check_box);
mDeleteButton=(Button)itemView.findViewById(R.id.list_item_crime_delete_button);
mTextView=(TextView)itemView.findViewById(R.id.crime_set_empty_text_view);
}
}
}
4.在 updateUI() 方法中,获取到数据集时,判断一下数据集的长度,如果大于零, 隐藏这个 TextView,然后执行之前一系列显示的操作;如果为零,就隐藏 RecyclerView,显示该 TextView。
public void updateUI(){
CrimeLab crimeLab=CrimeLab.get(getActivity());
List<Crime> crimes=crimeLab.getCrimes();
if(crimes.size()!=0){
mTextView.setVisibility(View.GONE);
if (mAdapter==null) {
mAdapter = new CrimeAdapter(crimes);
mCrimeRecyclerView.setAdapter(mAdapter);
}else{
mAdapter.setCrimes(crimes);
mAdapter.notifyDataSetChanged();
}
}else{
mCrimeRecyclerView.setVisibility(View.GONE);
mTextView.setVisibility(View.VISIBLE);
}
updateSubtitle();
}
INVISIBLE和GONE的主要区别是:当控件visibility属性为INVISIBLE时,界面保留了view控件所占有的空间;而控件属性为GONE时,界面则不保留view控件所占有的空间。