挑战练习13.8 用于RecyclerView 的空视图
当前,CriminalIntent应用启动后,会显示一个空白列表。从用户体验上来讲,即使crime列表是空的,也应展示提示或解释类信息。请设置空视图并展示类似“没有crime记录可以显示”的信息。再添加一个按钮,方便用户直接创建新的crime记录。判断crime列表是否包含数据,然后使用任何类都有的setVisibility方法控制占位视图的显示。
1.修改fragment_crime_list.xml,添加新的控件。
1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_height="match_parent" 4 android:layout_width="match_parent"> 5 <android.support.v7.widget.RecyclerView 6 xmlns:android="http://schemas.android.com/apk/res/android" 7 android:id="@+id/crime_recycle_view" 8 android:layout_width="match_parent" 9 android:layout_height="match_parent"/> 10 <TextView 11 android:id="@+id/null_crime_list" 12 android:layout_width="match_parent" 13 android:layout_height="wrap_content" 14 android:text="Crime records are not available" 15 android:layout_centerInParent="true" 16 android:layout_marginLeft="16dp" 17 android:layout_marginRight="16dp" 18 style="?android:listSeparatorTextViewStyle"/> 19 <Button 20 android:id="@+id/add_crime" 21 android:layout_width="match_parent" 22 android:layout_height="wrap_content" 23 android:layout_below="@+id/null_crime_list" 24 android:layout_marginLeft="16dp" 25 android:layout_marginRight="16dp" 26 android:text="AddCrime"/> 27 </RelativeLayout>
2.在CrimeListFragment.java添加fragment_crime_list.xml新加的TextView和Button控件的全局变量。
1 private TextView mNullCrimeListTextView; 2 private Button mAddCrimeButton;
3.在CrimeListFragment.java的onCreateView方法里面控件绑定,顺便给按钮添加点击事件并增加添加crime功能。
1 mNullCrimeListTextView = (TextView)view.findViewById(R.id.null_crime_list); 2 mAddCrimeButton = (Button)view.findViewById(R.id.add_crime); 3 mAddCrimeButton.setOnClickListener(new View.OnClickListener() { 4 @Override 5 public void onClick(View v) { 6 Crime crime = new Crime(); 7 CrimeLab.get(getActivity()).addCrime(crime); 8 Intent intent = CrimePagerActivity.newIntent(getActivity(), crime.getmId()); 9 startActivity(intent); 10 } 11 });
4.修改CrimeListFragment.java的updateUI方法,判断crime为空时textview和button控件可见。
1 private void updateUI(){ 2 CrimeLab crimeLab = CrimeLab.get(getActivity()); 3 List<Crime> crimes = crimeLab.getmCrimes(); 4 if(mAdapter == null){ 5 mAdapter = new CrimeAdapter(crimes); 6 mCrimeRecyclerView.setAdapter(mAdapter); 7 }else { 8 //重绘当前可见区域 9 //mAdapter.notifyDataSetChanged(); 10 11 //部分重绘 12 mAdapter.notifyItemChanged(mCrimeIndex); 13 } 14 15 if (crimes.size() != 0) { 16 mNullCrimeListTextView.setVisibility(View.INVISIBLE); 17 mAddCrimeButton.setVisibility(View.INVISIBLE); 18 } else { 19 mNullCrimeListTextView.setVisibility(View.VISIBLE); 20 mAddCrimeButton.setVisibility(View.VISIBLE); 21 } 22 23 updateSubtitle(); 24 }
5.运行效果: