美文网首页Android开发Android开发经验谈Android技术知识
Android编程权威指南(第2版)—第13章挑战练习

Android编程权威指南(第2版)—第13章挑战练习

作者: 亚欧沙龙 | 来源:发表于2018-08-11 12:27 被阅读8次

13.6 挑战练习:删除crime记录

这个比较简单,分三步

  • 第一步创建一个button
  • 第二步在CrimeLab增加删除方法
public void removeCrime(Crime c) {
        mCrimes.remove(c);
    }
  • 第三步修改CrimeFragment.java的onCreateView方法,绑定按钮,增加监听事件
mRemoveButton = (Button) v.findViewById(R.id.crime_remove_button);
        mRemoveButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                CrimeLab.get(getActivity()).removeCrime(mCrime);
                getActivity().finish();
            }
        });


13.7 挑战练习:优化字符串资源显示

这个按照书本的代码进行修改即可,效果如如下
Criminallntent

13.8 挑战练习:用于RecyclerView的空视图

(1)修改fragment_crime_list.xml

原本只有一个RecyclerView组建,现在增加父组建,并增加一个textview和一个button
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/crime_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    <TextView
        android:id="@+id/no_crime_textview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/no_crime"
        android:layout_centerInParent="true"
        android:layout_marginLeft="16dp"
        android:gravity="center"
        android:layout_marginRight="16dp"
        style="?android:listSeparatorTextViewStyle"
        android:layout_margin="15dp"/>

    <Button
        android:id="@+id/no_crime_add_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/no_crime_textview"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:text="@string/add_crime"
        android:background="@drawable/bt_selector"/>

</RelativeLayout>

(2)string.xml里面加上

<string name="no_crime">没有crime记录可以显示</string>

(3)修改CrimeListFragment.java

增加两个变量
private TextView mNoCrimeTextView;
private Button mNoCrimeButton;
修改onCreateView方法为上面两个变量绑定id组件
修改updateUI()增加如下代码
 public void updateUI(){

        CrimeLab crimeLab = CrimeLab.get(getActivity());

        List<Crime> crimes = crimeLab.getCrimes();
        //如果没有配置好CrimeAdapter,就创建一个CrimeAdapter
        if (mAdapter == null){
            //创建RecyclerAdapter
            mAdapter = new CrimeAdapter(crimes);
            // 然后设置给RecyclerView
            mCrimeRecyclerView.setAdapter(mAdapter);
        }else{
            //如果已经配置好CrimeAdapter,就调用notifyDataSetChanged()
            // 方法修改updateUI()方法
            mAdapter.setCrimes(crimes);
//            mAdapter.notifyDataSetChanged();
            //实现高效的RecyclerView刷新方法

            //如果想要刷新删除crime之后的CrimeListFragment,
//            mAdapter.notifyItemChanged( mIndex );  //单例更新  -- 会报错
            mAdapter.notifyDataSetChanged();  //全量更新
        }
        /*
        挑战练习 用于RecyclerView的空列表
         */
        if (crimes.size() == 0){
            mNoCrimetextView.setVisibility( View.VISIBLE );
            mNoCrimeButton.setVisibility( View.VISIBLE );
        }else {
            mNoCrimeButton.setVisibility( View.GONE );
            mNoCrimetextView.setVisibility( View.GONE );
        }
        updateSubtitle();
    }

具体访问我的Github

相关文章

网友评论

  • b988fb6ab828:我如果删除不是从最后一个crime开始,就会闪退,你的会吗?

本文标题:Android编程权威指南(第2版)—第13章挑战练习

本文链接:https://www.haomeiwen.com/subject/rzfdbftx.html