挑战练习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.运行效果:


原文地址:https://www.cnblogs.com/real1587/p/10027838.html