zoukankan      html  css  js  c++  java
  • 挑战练习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.运行效果:


  • 相关阅读:
    Openstack Swift 原理、架构与 API 介绍
    ReentrantLock 以及 AQS 实现原理
    AtomicInteger源码分析——基于CAS的乐观锁实
    深入浅出ThreadLocal
    Spring IOC的理解
    tomcat8 注册成服务后接sql数据失败
    Video.js 截图 Failed to execute 'drawImage' on 'CanvasRenderingContext2D'
    H5 播放Hls
    Video.js 源码浅析
    Hls流播放延时
  • 原文地址:https://www.cnblogs.com/real1587/p/10027838.html
Copyright © 2011-2022 走看看