一個帶有富文本功能的記事本

一個帶有富文本功能的記事本
已經很久沒有寫過博客了,果真不作項目,一直摸魚是提不起寫博客的興趣的。可是作項目肝又很痛,就很矛盾,233.
好了進入正題:
今天,要貼的是一個帶有富文本功能的記事本。也是我混進實驗室考覈的第一個項目。下面是要求:git

主界面:github

  1. 要求能查看記事本的概覽 (標題+一部份內容)
  2. 實現記事的搜索功能
  3. 默認按時間順序進行筆記本排序

編輯器:數據庫

  1. 帶有富文本功能
  2. 要求實現的格式很多於 4 種(越多越好)
  3. 設計時候要考慮到,格式的保存方式
  4. 記錄筆記最後修改時間

回收站:編輯器

  1. 有刪除單條的功能
  2. 有刪除所有的功能
  3. 從回收站恢復(移出回收站)

老規矩(也沒什麼老不老規矩的),先貼github地址(求star)
https://github.com/egoistor/Nodepad
而後呢,就是謝謝一些CSDN的做者:
首先是https://www.jianshu.com/p/9c2c1416d894,個人富文本基本都是這裏來的,固然本身也有學來着,畢竟蠢,仍是多借鑑。
而後是界面貼圖:
(https://img-blog.csdnimg.cn/20190131091218330.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_1,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Vnb2lzdG9y,size_1,color_FFFFFF,t_1aGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Vnb2lzdG9y,size_16,color_FFFFFF,t_70)
(https://img-blog.csdnimg.cn/20190131091601723.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Vnb2lzdG9y,size_16,color_FFFFFF,t_70)
(https://img-blog.csdnimg.cn/20190131091700396.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Vnb2lzdG9y,size_16,color_FFFFFF,t_70)而後就說說本身此次出現的問題,首先習慣很 重要 重要 重要
好比xml裏每個activity的title的hight若是沒有設置正確,就會調試到懷疑人生。
還有dialog的show()必定要寫。
而後就是在調試的時候靈活使用Logcat,真的很好用,能夠看到本身的各類問題。
還有就是LitePal真好用,真香。
我惟一想說的代碼問題就是在界面初始化數據庫的時候,會出現問題:ide

public void ininDataBase(){
        SharedPreferences sharedPreferences=this.getSharedPreferences("share",MODE_PRIVATE);
        boolean isFirstRun=sharedPreferences.getBoolean("isFirstRun", true);
        SharedPreferences.Editor editor=sharedPreferences.edit();
        if(isFirstRun){
            SQLiteDatabase db = LitePal.getDatabase();
            editor.putBoolean("isFirstRun", false);
            editor.commit();
        }else{
            noteList = LitePal.findAll(Note.class);
        }
    }

就是這一片了,問題在於你要判斷是不是activity第一次啓動,若是是第一次就只初始化數據庫,不對數據庫進行取數據操做,畢竟沒東西,程序會直接崩潰。具體的方法,我想代碼已經說的很清楚了,使用 SharedPreferences 進行永久化的判斷條件存儲,就ok。this

這是一個大一點的問題設計

還有一些小問題,好比什麼RecycleView的條目的點擊事件的添加,網上有蠻多教程都說的蠻清楚的,果真百度是個好東西。
具體呢:調試

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

    private RecyclerViewOnItemClickListener onItemClickListener;
    private RecyclerViewOnItemLongClickListener onItemLongClickListener;


    private List<Note> myNoteList;

    static class ViewHolder extends RecyclerView.ViewHolder{
        private View view;
        TextView NoteName;
        TextView TimeShow;

        public ViewHolder(View view){
            super(view);
            this.view=view;
            NoteName = view.findViewById(R.id.note_message);
            TimeShow = view.findViewById(R.id.time_shows);
        }
    }

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

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.note_item, parent, false);
        ViewHolder holder = new ViewHolder(view);
        view.setOnClickListener(this);
        view.setOnLongClickListener(this);
        return holder;
    }

    @Override
    public void onClick(View v) { if (onItemClickListener != null) {
        onItemClickListener.onItemClickListener(v, (Integer) v.getTag());
        }
    }

    @Override public boolean onLongClick(View v) {
        return onItemLongClickListener != null && onItemLongClickListener.onItemLongClickListener(v, (Integer) v.getTag());
    }

    public void setRecyclerViewOnItemClickListener(RecyclerViewOnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;

    }
    public void setOnItemLongClickListener(RecyclerViewOnItemLongClickListener onItemLongClickListener) {
        this.onItemLongClickListener = onItemLongClickListener;
    }

    public interface RecyclerViewOnItemClickListener {
        void onItemClickListener(View view, int position);
    }

    public interface RecyclerViewOnItemLongClickListener {
        boolean onItemLongClickListener(View view, int position);
    }
    @Override

    public void onBindViewHolder(final ViewHolder holder, int position) {

        Note Note = myNoteList.get(position);
        holder.NoteName.setText(Note.getMessage());
        holder.TimeShow.setText(Note.getYear()+"/"+Note.getMonth()+"/"+Note.getDay());
        holder.view.setTag(position);
    }

   

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

在adapter裏先對接口進行聲明,也就是如上代碼。
而後在activity裏調用便可。code

最後呢,就是須要改進的地方。xml

  1. 固然是老生常談的界面問題,界面醜陋,等我看完md,有時間回來修改。
  2. 插入圖片是寫死的,我雖然寫了//TODO,可是懶得改了
  3. 實際上是個大問題,按back鍵返回的時候,不會調用onCreate(),天然list不會刷新,我想了想應該調用onRestart(),何時改一下,看看。

還有博友發現了其餘問題,歡迎提出。

相關文章
相關標籤/搜索