用于 RecyclerView 的空视图

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控件所占有的空间。

1.png
2.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容