24. 设置模块(一)之收藏

上一节对“我”模块(二)进行了综述(可参见 “我”模块(二) 进行了解),接下来将从设置模块开始详细介绍:

知识点

  • 掌握“收藏”界面的开发,能够实现新闻收藏功能。
  • 掌握“设置”界面的开发,能够设置用户的基本信息。
  • 掌握“修改密码”界面的开发,能够实现密码的修改功能。
  • 掌握“设置密保”界面的开发, 能够实现密保的设置功能。

收藏

任务综述:
“收藏”界面主要展示用户登录成功后收藏的一些新闻信息,并且侧滑每条信息会出现红色“删除”按钮,点击“删除”按钮会删除对该新闻信息的收藏,点击每条新闻信息会跳转到新闻详情界面。

1. “收藏”界面

任务分析:
“收藏”界面主要以列表形式展示用户登录成功后收藏的一些新闻信息,当侧滑每条新闻信息时会出现红色“删除”按钮,界面效果如图所示。

24. 设置模块(一)之收藏
“收藏”界面

任务实施:
(1)创建“收藏”界面:CollectionActivity & activity_collection。

(2)放置界面控件。
一个RecyclerView控件用于显示收藏列表,
一个TextView控件用于显示没有数据时的提示文本。

activity_collection.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_collection"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <include layout="@layout/main_title_bar" />
        <android.support.v7.widget.RecyclerView
            android:id="@+id/rv_recyclerView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#EEEEEE"
            android:orientation="vertical"
            android:overScrollMode="never"
            android:scrollbars="vertical" />
    </LinearLayout>
    <TextView
        android:id="@+id/tv_none"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="暂无收藏信息"
        android:textColor="@android:color/darker_gray"
        android:textSize="16sp"
        android:visibility="gone" />
</RelativeLayout>

2. “收藏”界面Item

任务分析:
由于“收藏”界面用到了RecyclerView控件,因此需要为该控件创建一个Item界面,界面效果如图所示。

24. 设置模块(一)之收藏
“收藏”界面Item

任务实施:
(1)创建“收藏”界面Item:collection_item.xml。

(2)放置界面控件。
3个TextViewk控件,其中一个TextView控件用于显示新闻名称;一个TextView控件用于显示新闻类型;一个TextView控件用于显示删除文字;
一个ImageView控件用于显示新闻图片。

collection_item.xml

<?xml version="1.0" encoding="utf-8"?>
<com.itheima.topline.view.SlidingButtonView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:layout_marginBottom="1dp"
    android:background="@android:color/white">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:id="@+id/tv_delete"
            android:layout_width="80dp"
            android:layout_height="match_parent"
            android:layout_toRightOf="@+id/layout_content"
            android:background="@drawable/collection_btn_red_havebackground"
            android:gravity="center"
            android:text="删 除"
            android:textColor="#DDFFFFFF" />
        <RelativeLayout
            android:id="@+id/layout_content"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/collection_btn_black_background"
            android:padding="8dp">
            <ImageView
                android:id="@+id/iv_img"
                android:layout_width="100dp"
                android:layout_height="80dp"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:layout_centerVertical="true"
                android:scaleType="fitXY" />
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_marginLeft="10dp"
                android:layout_toRightOf="@id/iv_img"
                android:orientation="vertical">
                <TextView
                    android:id="@+id/tv_name"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:textColor="@android:color/black"
                    android:textSize="14sp" />
                <RelativeLayout
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="8dp">
                    <TextView
                        android:id="@+id/tv_newsType_name"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textSize="12sp" />
                </RelativeLayout>
            </LinearLayout>
        </RelativeLayout>
    </RelativeLayout>
</com.itheima.topline.view.SlidingButtonView>

(3)自定义侧滑控件。由于向左滑动“收藏”界面的Item时会出现红色“删除”按钮,因此需要定义一个侧滑控件SlidingButtonView用于“收藏”界面的Item布局中,在view文件夹中创建一个SlidingButtonView类并继承HorizontalScrollView类。

SlidingButtonView.java

public class SlidingButtonView extends HorizontalScrollView {
    private TextView mTextView_Delete;
    private int mScrollWidth;
    private IonSlidingButtonListener mIonSlidingButtonListener;
    private Boolean isOpen = false;
    private Boolean once = false;
    public SlidingButtonView(Context context) {
        this(context, null);
    }
    public SlidingButtonView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }
    public SlidingButtonView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        this.setOverScrollMode(OVER_SCROLL_NEVER);
    }
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        if (!once) {
            mTextView_Delete = (TextView) findViewById(R.id.tv_delete);
            once = true;
        }
    }
    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);
        if (changed) {
            this.scrollTo(0, 0);
            //获取水平滚动条可以滑动的范围,即右侧按钮的宽度
            mScrollWidth = mTextView_Delete.getWidth();
        }
    }
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        int action = ev.getAction();
        switch (action) {
            case MotionEvent.ACTION_DOWN:
            case MotionEvent.ACTION_MOVE:
                mIonSlidingButtonListener.onDownOrMove(this);
                break;
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
                changeScrollx();
                return true;
            default:
                break;
        }
        return super.onTouchEvent(ev);
    }
    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        mTextView_Delete.setTranslationX(l - mScrollWidth);
    }
    /**
     * 按滚动条被拖动距离判断关闭或打开菜单
     */
    public void changeScrollx() {
        if (getScrollX() >= (mScrollWidth / 2)) {
            this.smoothScrollTo(mScrollWidth, 0);
            isOpen = true;
            mIonSlidingButtonListener.onMenuIsOpen(this);
        } else {
            this.smoothScrollTo(0, 0);
            isOpen = false;
        }
    }
    /**
     * 打开菜单
     */
    public void openMenu() {
        if (isOpen) {
            return;
        }
        this.smoothScrollTo(mScrollWidth, 0);
        isOpen = true;
        mIonSlidingButtonListener.onMenuIsOpen(this);
    }
    /**
     * 关闭菜单
     */
    public void closeMenu() {
        if (!isOpen) {
            return;
        }
        this.smoothScrollTo(0, 0);
        isOpen = false;
    }
    public void setSlidingButtonListener(IonSlidingButtonListener listener) {
        mIonSlidingButtonListener = listener;
    }
    public interface IonSlidingButtonListener {
        void onMenuIsOpen(View view);
        void onDownOrMove(SlidingButtonView slidingButtonView);
    }
}

(4)创建“删除”按钮的背景选择器。在res/drawable文件夹中创建“删除”按钮的背景选择器collection_red_del_selector.xml,当“删除”按钮被按下时显示深红色背景,当“删除”按钮弹起时显示浅红色背景。

collection_red_del_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false">
                <shape>
                    <solid android:color="#FF0000" />
                </shape>
            </item>
 <item android:state_pressed="true">
        <shape>
            <solid android:color="#EE1111" />
        </shape>
    </item>
</selector>

(5)创建Item的背景选择器。在res/drawable文件夹中创建Item的背景选择器collection_btn_black_background.xml。当Item被按下时显示灰色背景,当Item弹起时显示白色背景。

collection_btn_black_background.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <layer-list>
            <item>
                <shape>
                    <solid android:color="@android:color/white" />
                </shape>
            </item>
            <item>
                <shape>
                    <solid android:color="#22000000" />
                </shape>
            </item>
        </layer-list>
    </item>
    <item>
        <shape>
            <solid android:color="@android:color/white" />
        </shape>
    </item>
</selector>

3. “收藏”界面Adapter

任务分析:
“收藏”界面是通过RecyclerView控件展示收藏信息的,因此需要创建一个数据适配器CollectionAdapter对RecyclerView控件进行数据适配。

任务实施:
(1)创建CollectionAdapter类。在adapter包中,创建一个CollectionAdapter类继承RecyclerView.Adapter<CollectionAdapter.MyViewHolder>类并实现SlidingButtonView.IonSlidingButtonListener接口。

(2)创建ViewHolder类。在CollectionAdapter类中创建一个MyViewHolder类获取Item界面上的控件。

(3)创建删除收藏条目的方法。在CollectionAdapter类中创建一个removeData()方法用于删除对应的收藏信息。

CollectionAdapter.java

public class CollectionAdapter extends RecyclerView.Adapter<CollectionAdapter.
        MyViewHolder> implements SlidingButtonView.IonSlidingButtonListener {
    private Context mContext;
    private IonSlidingViewClickListener mIDeleteBtnClickListener;
    private List<NewsBean> newsList = new ArrayList<>();
    private SlidingButtonView mMenu = null;
    public CollectionAdapter(Context context) {
        mContext = context;
        mIDeleteBtnClickListener = (IonSlidingViewClickListener) context;
    }
    public void setData(List<NewsBean> newsList) {
        this.newsList = newsList;
        notifyDataSetChanged();
    }
    @Override
    public int getItemCount() {
        return newsList.size();
    }
    @Override
    public void onBindViewHolder(final MyViewHolder holder, int position) {
        NewsBean bean = newsList.get(position);
        holder.tv_name.setText(bean.getNewsName());
        holder.tv_newsTypeName.setText(bean.getNewsTypeName());
        Glide
                .with(mContext)
                .load(bean.getImg1())
                .error(R.mipmap.ic_launcher)
                .into((holder).iv_img);
        //设置内容布局的宽为屏幕宽度
        holder.layout_content.getLayoutParams().width = UtilsHelper.getScreenWidth(
                mContext);
        holder.layout_content.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //判断是否有删除菜单打开
                if (menuIsOpen()) {
                    closeMenu();//关闭菜单
                } else {
                    int n = holder.getLayoutPosition();
                    mIDeleteBtnClickListener.onItemClick(v, n);
                }
            }
        });
        holder.btn_Delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int n = holder.getLayoutPosition();
                mIDeleteBtnClickListener.onDeleteBtnCilck(v, n);
            }
        });
    }
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup arg0, int arg1) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.collection_item, arg0,
                false);
        MyViewHolder holder = new MyViewHolder(view);
        return holder;
    }
    class MyViewHolder extends RecyclerView.ViewHolder {
        private ImageView iv_img;
        public TextView btn_Delete, tv_name, tv_newsTypeName;
        public ViewGroup layout_content;
        public MyViewHolder(View itemView) {
            super(itemView);
            btn_Delete = (TextView) itemView.findViewById(R.id.tv_delete);
            layout_content = (ViewGroup) itemView.findViewById(R.id.layout_content);
            iv_img = (ImageView) itemView.findViewById(R.id.iv_img);
            tv_name = (TextView) itemView.findViewById(R.id.tv_name);
            tv_newsTypeName = (TextView) itemView.findViewById(R.id.tv_newsType_name);
            ((SlidingButtonView) itemView).setSlidingButtonListener(CollectionAdapter.
                    this);
        }
    }
    public void removeData(int position, TextView tv_none, String userName) {
        NewsBean bean = newsList.get(position);
        //从收藏新闻的数据库中也要删除此数据
        DBUtils.getInstance(mContext).delCollectionNewsInfo(bean.getId(), bean.
                getType(), userName);
        newsList.remove(position);
        notifyItemRemoved(position);
        if (newsList.size() == 0)
            tv_none.setVisibility(View.VISIBLE);
    }
    /**
     * 删除菜单打开信息接收
     */
    @Override
    public void onMenuIsOpen(View view) {
        mMenu = (SlidingButtonView) view;
    }
    /**
     * 滑动或者点击了Item监听
     */
    @Override
    public void onDownOrMove(SlidingButtonView slidingButtonView) {
        if (menuIsOpen()) {
            if (mMenu != slidingButtonView) {
                closeMenu();
            }
        }
    }
    /**
     * 关闭菜单
     */
    public void closeMenu() {
        mMenu.closeMenu();
        mMenu = null;
    }
    /**
     * 判断是否有菜单打开
     */
    public Boolean menuIsOpen() {
        if (mMenu != null) {
            return true;
        }
        return false;
    }
    public interface IonSlidingViewClickListener {
        void onItemClick(View view, int position);
        void onDeleteBtnCilck(View view, int position);
    }
}

4. 收藏新闻信息表

任务分析:
由于“收藏”界面需要显示用户收藏的所有信息,因此需要在数据库中创建一个收藏信息的表,把用户收藏的信息保存到该表中,便于后续根据用户名查询该用户收藏的数据。

任务实施:
(1)创建收藏新闻信息表。在sqlite包的SQLiteHelper类中的“public static final String CONSTELLATION = "constellation"; //十二星座信息”语句下方添加如下代码:

    //收藏新闻信息
    public static final String COLLECTION_NEWS_INFO = "collection_news_info";

在SQLiteHelper类中创建一个COLLECTION_NEWS_INFO收藏信息表,具有代码如下:

/**
         * 创建收藏表
         */
        db.execSQL("CREATE TABLE  IF NOT EXISTS " + COLLECTION_NEWS_INFO + "( "
                + "_id INTEGER PRIMARY KEY AUTOINCREMENT, "
                + "id INTEGER, "         //新闻id
                + "type INTEGER, "      //新闻类型
                + "userName VARCHAR," //用户名
                + "newsName VARCHAR, "      //新闻名称
                + "newsTypeName VARCHAR," //新闻类型名称
                + "img1 VARCHAR, "        //图片1
                + "img2 VARCHAR, "       //图片2
                + "img3 VARCHAR, "      //图片3
                + "newsUrl VARCHAR "  //新闻链接地址
                + ")");

在SQLiteHelper类的onUpgrade()方法中的“db.execSQL("DROP TABLE IF EXISTS " + CONSTELLATION);”语句下方添加如下代码:

db.execSQL("DROP TABLE IF EXISTS " + COLLECTION_NEWS_INFO);

(2)保存收藏的数据到数据库中。由于收藏的新闻信息数据需要保存到数据库中,因此在utils包中的DBUtils类中创建一个saveCollectionNewsInfo()方法保存收藏的新闻信息数据,具体代码如下所示:

  /**
     * 保存收藏信息
     */
    public void saveCollectionNewsInfo(NewsBean bean, String userName) {
        ContentValues cv = new ContentValues();
        cv.put("id", bean.getId());
        cv.put("type", bean.getType());
        cv.put("userName", userName);
        cv.put("newsName", bean.getNewsName());
        cv.put("newsTypeName", bean.getNewsTypeName());
        cv.put("img1", bean.getImg1());
        cv.put("img2", bean.getImg2());
        cv.put("img3", bean.getImg3());
        cv.put("newsUrl", bean.getNewsUrl());
        db.insert(SQLiteHelper.COLLECTION_NEWS_INFO, null, cv);
    }

(3)根据用户名从数据库获取收藏信息。由于“收藏”界面需要根据用户名(userName)查询该用户的收藏信息,因此需要在utils包中的DBUtils类中创建一个getCollectionNewsInfo()方法获取收藏的信息数据,具体代码如下所示:

    /**
     * 获取收藏信息
     */
    public List<NewsBean> getCollectionNewsInfo(String userName) {
        String sql = "SELECT * FROM " + SQLiteHelper.COLLECTION_NEWS_INFO
                + " WHERE  userName=? ";
        Cursor cursor = db.rawQuery(sql, new String[]{userName});
        List<NewsBean> newsList = new ArrayList<>();
        NewsBean bean = null;
        while (cursor.moveToNext()) {
            bean = new NewsBean();
            bean.setId(cursor.getInt(cursor.getColumnIndex("id")));
            bean.setType(cursor.getInt(cursor.getColumnIndex("type")));
            bean.setNewsName(cursor.getString(cursor.getColumnIndex("newsName")));
            bean.setNewsTypeName(cursor.getString(cursor.getColumnIndex("newsTypeName")));
            bean.setImg1(cursor.getString(cursor.getColumnIndex("img1")));
            bean.setImg2(cursor.getString(cursor.getColumnIndex("img2")));
            bean.setImg3(cursor.getString(cursor.getColumnIndex("img3")));
            bean.setNewsUrl(cursor.getString(cursor.getColumnIndex("newsUrl")));
            newsList.add(bean);
        }
        cursor.close();
        return newsList;
    }

(4)判断新闻是否被收藏。“收藏”界面需要判断数据库中是否已经有该收藏数据,如果有,则删除本条收藏信息,重新保存一遍;如果没有,则直接保存收藏信息,因此需要在utils包中的DBUtils类中创建一个hasCollectionNewsInfo()方法判断一条新闻是否被收藏,具体代码如下所示:

  /**
     * 判断一条新闻是否被收藏
     */
    public boolean hasCollectionNewsInfo(int id, int type, String userName) {
        boolean hasNewsInfo = false;
        String sql = "SELECT * FROM " + SQLiteHelper.COLLECTION_NEWS_INFO
                + " WHERE id=? AND type=? AND userName=?";
        Cursor cursor = db.rawQuery(sql, new String[]{id + "", type + "", userName + ""});
        if (cursor.moveToFirst()) {
            hasNewsInfo = true;
        }
        cursor.close();
        return hasNewsInfo;
    }

(5)删除收藏信息。由于在删除收藏信息时也会删除数据库中保存的该条数据,因此需要在utils包中的DBUtils类中创建一个delCollectionNewsInfo()方法删除某一条收藏的信息数据,具体代码如下所示:

    /**
     * 删除某一条收藏信息
     */
    public boolean delCollectionNewsInfo(int id, int type, String userName) {
        boolean delSuccess = false;
        if (hasCollectionNewsInfo(id, type, userName)) {
            int row = db.delete(SQLiteHelper.COLLECTION_NEWS_INFO,
                    " id=? AND type=? AND userName=? ", new String[]{id + "", type + "", userName});
            if (row > 0) {
                delSuccess = true;
            }
        }
        return delSuccess;
    }

(6)修改“新闻详情”界面。由于点击“新闻详情”右上角的“收藏”图标才会收藏或取消收藏信息,因此需要在NewsDetailActivity.java中的“ private String position;”语句下方添加如下代码:

    private boolean isCollection=false;
    private DBUtils db;
    private String userName;

在“if (bean == null) return;”语句下方添加代码:

 db=DBUtils.getInstance(NewsDetailActivity.this);

在“ newsUrl = bean.getNewsUrl();”语句下方添加如下代码:

userName= UtilsHelper.readLoginUserName(NewsDetailActivity.this);

在init()方法中的“ iv_collection.setVisibility(View.VISIBLE);”语句下方添加如下代码:

if(db.hasCollectionNewsInfo(bean.getId(),bean.getType(),userName)){
            iv_collection.setImageResource(R.drawable.collection_selected);
            isCollection=true;
        }else{
            iv_collection.setImageResource(R.drawable.collection_normal);
            isCollection=false;
        }

在init()方法中的“收藏”按钮iv_collection的点击事件中添加如下代码:

        iv_collection.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (UtilsHelper.readLoginStatus(NewsDetailActivity.this)) {
                    if (isCollection) {
                        iv_collection.setImageResource(R.drawable.collection_normal);
                        isCollection = false;
                        //删除保存到新闻收藏数据库中的数据
                        db.delCollectionNewsInfo(bean.getId(), bean.getType(), userName);
                        Toast.makeText(NewsDetailActivity.this, "取消收藏", Toast.LENGTH_SHORT).show();
                        Intent data = new Intent();
                        data.putExtra("position", position);
                        setResult(RESULT_OK, data);
                    } else {
                        iv_collection.setImageResource(R.drawable.collection_selected);
                        isCollection = true;
                        //把该数据保存到新闻收藏数据库中
                        db.saveCollectionNewsInfo(bean, userName);
                        Toast.makeText(NewsDetailActivity.this, "收藏成功", Toast.LENGTH_SHORT).show();
                    }
                }else{
                    Toast.makeText(NewsDetailActivity.this, "您还未登录,请先登录",Toast.LENGTH_SHORT).
                            show();
                }
            }
        });

5. “收藏”界面逻辑代码

任务分析:

在“收藏”界面中,当向左滑动“收藏”界面条目时会出现红色“删除”按钮,点击该按钮会删除当前收藏信息,同时也会删除数据库中对应的信息。点击“收藏”界面中的每个条目会跳转到对应的“新闻详情”界面。

任务实施:
(1)获取界面控件。在CollectionActivity中创建界面控件的初始化方法initView(),用于获取“收藏”界面所要用到的控件。

(2)设置“收藏”界面对应的适配器。在CollectionActivity中创建setAdapter()方法,用于设置“收藏”界面对应的CollectionAdapter适配器。

(3)设置“收藏”界面Item的点击事件。在CollectionActivity中重写onItemClick()方法,用于设置“收藏”界面Item的点击事件。

(4)接收回传数据。在CollectionActivity中重写onActivityResult()方法,用于接听新闻详情界面取消收藏后传递过来的信息。

CollectionActivity.xml

public class CollectionActivity extends AppCompatActivity implements
        CollectionAdapter.IonSlidingViewClickListener {
    private RecyclerView mRecyclerView;
    private CollectionAdapter mAdapter;
    private TextView tv_main_title, tv_back, tv_none;
    private RelativeLayout rl_title_bar;
    private DBUtils db;
    private List<NewsBean> newsList;
    private String userName;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_collection);
        db = DBUtils.getInstance(CollectionActivity.this);
        userName = UtilsHelper.readLoginUserName(CollectionActivity.this);
        initView();
        setAdapter();
    }
    private void initView() {
        newsList = new ArrayList<>();
        newsList = db.getCollectionNewsInfo(userName);
        tv_main_title = (TextView) findViewById(R.id.tv_main_title);
        tv_main_title.setText("收藏");
        rl_title_bar = (RelativeLayout) findViewById(R.id.title_bar);
        rl_title_bar.setBackgroundColor(getResources().getColor(R.color.
                rdTextColorPress));
        tv_back = (TextView) findViewById(R.id.tv_back);
        tv_back.setVisibility(View.VISIBLE);
        mRecyclerView = (RecyclerView) findViewById(R.id.rv_recyclerView);
        tv_none = (TextView) findViewById(R.id.tv_none);
        tv_back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                CollectionActivity.this.finish();
            }
        });
    }
    private void setAdapter() {
        mAdapter = new CollectionAdapter(this);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        mRecyclerView.setAdapter(mAdapter);
        mAdapter.setData(newsList);
        if (newsList.size() == 0) tv_none.setVisibility(View.VISIBLE);
        mRecyclerView.setItemAnimator(new DefaultItemAnimator());
    }
    @Override
    public void onItemClick(View view, int position) {
        Intent intent = new Intent(CollectionActivity.this, NewsDetailActivity.class);
        intent.putExtra("newsBean", newsList.get(position));
        intent.putExtra("position", position + "");
        startActivityForResult(intent, 1);
    }
    @Override
    public void onDeleteBtnCilck(View view, int position) {
        mAdapter.removeData(position, tv_none, userName);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (data != null) {
            String position = data.getStringExtra("position");
            mAdapter.removeData(Integer.parseInt(position), tv_none, userName);
        }
    }
}

(5)修改“我”界面逻辑代码。由于点击“我”界面上的“收藏”条目时会跳转到“收藏”界面,因此需要在MeFragment中找到onClick()方法中的注释“//跳转到收藏界面”语句下方添加如下代码:

            case R.id.rl_collection:
             //   if (isLogin) {
                    Intent collection = new Intent(getActivity(), CollectionActivity.class);
                    startActivity(collection);
           //     } else {
             //       Toast.makeText(getActivity(), "您还未登录,请先登录",
                            Toast.LENGTH_SHORT).show();
              //  }