LitePal+RecyclerView+checkBox实现便签功能(仿小米便签)

本文介绍了一款Android便签应用的实现过程,重点在于如何结合LitePal库进行数据管理,以及在RecyclerView中处理CheckBox的长按事件。通过提供的GitHub项目链接,可以查看完整的代码实现。
摘要由CSDN通过智能技术生成

费时两天,主要难点在RecyclerView和CheckBox的长按事件上。

上代码:

Note的JavaBean:

package com.example.jarvist.remember;

import org.litepal.crud.DataSupport;

import java.io.Serializable;
import java.util.Date;

/**
 * Created by Jarvist on 2017/8/24.
 */
//传递对象要接入Serializable接口
public class Note extends DataSupport implements Serializable {
    private int id;
    private String content;
    private Date date;
    private boolean checked;

    public boolean isChecked() {
        return checked;
    }

    public void setChecked(boolean checked) {
        this.checked = checked;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }


}

RecyclerView所需的Adapter

package com.example.jarvist.remember;

import android.content.Context;
import android.content.Intent;
import android.support.design.widget.Snackbar;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.text.Layout;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.TextAppearanceSpan;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by Jarvist on 2017/8/24.
 */

public class NoteAdapter extends RecyclerView.Adapter <NoteAdapter.ViewHolder>
            implements View.OnClickListener,View.OnLongClickListener{

    private List<Note> mNoteList;

    private Context mContext;

    private RecyclerViewOnItemClickListener onItemClickListener;
    //multiple choice
    public boolean MUL_tag = false;
    //checkbox situation map 保存CheckBox选中状态
    private HashMap<Integer,Boolean> ischecked = new HashMap<Integer, Boolean>();


    public NoteAdapter (List<Note> noteList){
        mNoteList = noteList;
        initMaps();
    }

    public void initMaps(){
        for(int i = 0; i <mNoteList.size(); i++){
            ischecked.put(i,false);
        }
    }

    static class ViewHolder extends RecyclerView.ViewHolder{
        CardView cardView;
        TextView contentView;
        TextView dateView;
        CheckBox checkBox;

        public ViewHolder(View v){
            super(v);
            cardView = (CardView)v.findViewById(R.id.cardview);
            contentView = (TextView)v.findViewById(R.id.content);
            dateView = (TextView)v.findViewById(R.id.date);
            checkBox = (CheckBox)v.findViewById(R.id.checkbox);

        }
    }

    @Override
    public ViewHolder onCreateViewHolder (final ViewGroup parent, int viewType){
        if(mContext == null){
            mContext = parent.getContext();
        }
        final View view = LayoutInflater.from(mContext).inflate(R.layout.note_item,parent,false);
        final ViewHolder viewHolder = new ViewHolder(view);

        viewHolder.cardView.setOnClickListener(this);
        viewHolder.cardView.setOnLongClickListener(this);

        return viewHolder;
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position){
        Note note = mNoteList.get(position);
        String values = note.getContent();
        holder.contentView.setText(values);
        holder.dateView.setText(new SimpleDateFormat("yyyy/MM/dd    HH:mm:ss").format(note.getDate()));
        //多选状态,CheckBox显示,否则不显示
        if(MUL_tag) {
            holder.checkBox.setVisibility(View.VISIBLE);
        }
        else {
            holder.checkBox.setVisibility(View.INVISIBLE);
        }
        //注意用setTag保存position信息
        holder.cardView.setTag(position);
        //判断CheckBox,保存选中信息
        holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                ischecked.put(position,isChecked);
            }
        });

        if(ischecked.get(position) == null)
            ischecked.put(position,false);
        //CheckBox状态
        holder.checkBox.setChecked(ischecked.get(position));
    }

    @Override
    public int getItemCount(){
        return mNoteList.size();
    }

    //设置单击传入position
    @Override
    public void onClick(View v){
        if(onItemClickListener != null)
        {
            onItemClickListener.onItemClickListener(v,(Integer)v.getTag());
        }
    }
    //长按传入position
    @Override
    public boolean onLongClick(View v){
        initMaps();
        return onItemClickListener != null && onItemClickListener.onLongClickListener(v,(Integer)v.getTag());
        }

    //创建监听事件
    public void setRecycleViewOnItemClickListener(RecyclerViewOnItemClickListener onItemClickListener){
        this.onItemClickListener = onItemClickListener;
    }
    //
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值