首页 > 其他分享 >Android开发_记事本(3)

Android开发_记事本(3)

时间:2023-04-10 19:36:51浏览次数:40  
标签:note layout content 开发 noteList import Android android 记事本

适配器NoteAdapter

相当于数据和ListView之间的中介

 package com.example.note;
 ​
 import android.content.Context;
 import android.content.SharedPreferences;
 import android.preference.PreferenceManager;
 import android.text.TextUtils;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.BaseAdapter;
 import android.widget.Filter;
 import android.widget.Filterable;
 import android.widget.TextView;
 ​
 import java.util.ArrayList;
 import java.util.List;
 import java.util.prefs.Preferences;
 ​
 //BaseAdapter:几乎每一个适配器都会继承的superclass,Filterable方便对内容进行排序
 public class NoteAdapter extends BaseAdapter implements Filterable {
     private Context mContext;
 ​
     private List<Note> backList;            //用来备份原始数据,防止更新失败时丢失之前的数据
     private List<Note> noteList;            //这个数据是会改变的,所以要有个变量来备份一下原始数据
     private MyFilter myFilter;
 ​
     public NoteAdapter(Context mContext,List<Note> notelist) {
         this.mContext = mContext;
         this.noteList = notelist;
         backList = noteList;
    }
 ​
     @Override
     public int getCount(){return noteList.size();}
     @Override
     public Object getItem(int position){return noteList.get(position);}
     @Override
     public long getItemId(int position){return position;}
 ​
     @Override
     //固定格式
     public View getView(int position, View converView, ViewGroup parent){
         SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
         mContext.setTheme((sharedPreferences.getBoolean("nightMode",false)? R.style.NightTheme:R.style.DayTheme));
         View v = View.inflate(mContext,R.layout.note_layout,null);      //渲染一个View
         TextView tv_content = (TextView)v.findViewById(R.id.tv_content);     //第一行内容
         TextView tv_time = (TextView)v.findViewById(R.id.tv_time);           //第二行时间
 ​
         //set text for TextView
         String allText = noteList.get(position).getContent();               //获取每一个content
         /*if(sharedPreferences.getBoolean("noteTitle",true)){
             tv_content.setText(allText.split("\n")[0]);
         } */
         tv_content.setText(allText);                                        //进行赋值
 ​
         tv_time.setText(noteList.get(position).getTime());
 ​
         //save note id to tag
         v.setTag(noteList.get(position).getId());
 ​
         return v;
    }
 ​
     @Override
     public Filter getFilter(){
         if(myFilter == null){
             myFilter = new MyFilter();
        }
         return myFilter;
    }
 ​
 ​
 ​
     class MyFilter extends Filter{
         //我们在perfoFiltering(CharSequence charSequence)这个方法中定义过滤规则
         @Override
         protected FilterResults performFiltering(CharSequence charSequence){
             FilterResults result = new FilterResults();
             List<Note> list;
             if(TextUtils.isEmpty(charSequence)){            //当过滤的关键字为空的时候,我们则显示所有的数据
                 list = backList;
            } else{
               list = new ArrayList<>();
               for(Note note : backList){
                   if(note.getContent().contains(charSequence)){
                       list.add(note);
                  }
              }
            }
             result.values = list;                           //将得到的集合保存到FilterResult的val变量中
             result.count = list.size();                     //将集合的大小保存到FilterResult的count变量中
 ​
             return result;
        }
         //在publishResult方法中告诉适配器更新界面
         @Override
         protected void publishResults(CharSequence charSequence,FilterResults filterResults){
             noteList = (List<Note>)filterResults.values;
             if(filterResults.count > 0){
                 notifyDataSetChanged();                     //通知数据发生了改变
            }else{
                 notifyDataSetChanged();                     //通知数据失效
            }
        }
    }
 ​
 ​
 ​
 }
 ​

note_layout

以某种布局排列ListView

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:background="@drawable/note_shape"
     android:orientation="vertical"
     android:outlineAmbientShadowColor="@color/black"
     android:paddingLeft="10dp"
     android:paddingRight="10dp"
     android:paddingBottom="12dp">
 ​
     <TextView
         android:id="@+id/tv_content"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:singleLine="true"
         android:text="Content"
         android:textColor="?attr/tvMainColor"
         android:textSize="20dp" />
 ​
     <TextView
         android:id="@+id/tv_time"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="Time"
         android:textColor="@color/greyC"
         android:textSize="16dp" />
 </LinearLayout>

效果:

 

 

此时的MainActivity

 package com.example.note;
 ​
 import androidx.appcompat.app.AppCompatActivity;
 ​
 import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.View;
 import android.widget.ListView;
 import android.widget.TextView;
 ​
 import com.google.android.material.floatingactionbutton.FloatingActionButton;
 ​
 import java.util.ArrayList;
 import java.util.List;
 ​
 public class MainActivity extends BaceActivity {
     private NoteDatabase dbHelper;
     private Context context = this;
 ​
 ​
 ​
     final String TAG = "tag";
     FloatingActionButton btn;   //后面再初始化
     TextView tv;
     //笔记本的核心:ListView
     private ListView lv;
     private NoteAdapter adapter;
     private List<Note> noteList = new ArrayList<>();
 ​
 ​
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         //floatingbutton初始化
         btn = ( FloatingActionButton)findViewById(R.id.fab);
 ​
         lv = findViewById(R.id.lv);
         adapter = new NoteAdapter(getApplicationContext(),noteList);    //获取app的contex的function
 ​
         refreshListView();                                              //每次更新的时候需要刷新listview
 ​
 ​
         lv.setAdapter(adapter);
 ​
 ​
 ​
         btn.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
                 //测试btn
                 //Log.d(TAG,"onClick:click");
                 Intent intent = new Intent(MainActivity.this,EditActivity.class);//从参数一跳转到参数二
                 //启动活动并获取结果
                 startActivityForResult(intent,0);                                                         //启动参数这样的一个跳转
 ​
 ​
            }
        });
 ​
    }
 ​
     //下面接受startActivityForResult结果
     @Override
     //通过上面的Intent跳转到Edit,并通过下面的函数来对Edit的内容进行接收
     protected void onActivityResult(int requestCode,int resultCode,Intent data){
         super.onActivityResult(requestCode,resultCode,data);
         String content = data.getStringExtra("content");//获取edit的content值和time值
         String time = data.getStringExtra("time");
         Note note = new Note(content,time,1);
         //调用CRUD
         CRUD op = new CRUD(context);
         op.open();
         op.addNote(note);
         op.close();
         refreshListView();          //更改完结果后就刷新,没有这条语句则会在下一次打开app时刷新
 ​
    }
 ​
     public  void  refreshListView(){
 ​
         CRUD op = new CRUD(context);
         op.open();
 ​
         //set adapter
         if(noteList.size() > 0){                    //如果当前的list非空,则清楚所有的,再加上更新后所有的
             noteList.clear();
        }
         noteList.addAll(op.getAllNotes());
 ​
             op.close();
             adapter.notifyDataSetChanged();
 ​
    }
 ​
 }

此时实现效果

写完笔记返回时可以看到

 

 

 

但无法点击、修改list内容等进一步操作

 

 

 

标签:note,layout,content,开发,noteList,import,Android,android,记事本
From: https://www.cnblogs.com/zsc02/p/17304054.html

相关文章

  • Android开发_记事本(4)
    BaseActivity用作大多数页面的父类 packagecom.example.note; ​ //用来当作大多是activity的superclass ​ ​ importstaticandroid.provider.ContactsContract.Intents.Insert.ACTION; ​ importandroid.app.StatusBarManager; importandroid.content.Broadcas......
  • Android开发_记事本(5)
    菜单栏在res目录下新建文件夹menu,并在该目录下新建main_menu.xml  若要在栏里面加图片则需要引入drawable中的东西新建矢量图菜单栏按钮    再新建主页面删除所有按钮和编辑界面的删除当前笔记的按钮  main_menu <?xmlversion="1.0"encoding="utf......
  • Qt for Android QtQuick应用程序 USB连接手机调试运行错误:adb: failed to *.apk: No s
    1.场景Windows11、Qt6.5.0QtQuick应用程序USB连接手机调试运行。2.错误信息adb:failedto*.apk:NosuchfileordirectoryInstallingtodevicefailed!进程"C:\Users\Administrator\Qt\6.5.0\mingw_64\bin\androiddeployqt.exe"退出,退出代码16。安装应用失败,发生未知错......
  • Android开发_记事本(2)数据库
    APP中的数据库知识点ListViewhttps://blog.csdn.net/indeedes/article/details/119530068开发过程需求可以写并保存多个输入的笔记内容按照一定顺序显示出来如果屏幕不够可以下拉输入的内容可以增删改查APP核心:ListViewListView简介在Android开发中,ListView是一个比......
  • Android开发_记事本(1)
    一些知识TextviewTextView中有下述几个属性:id:为TextView设置一个组件id,根据id,我们可以在Java代码中通过findViewById()的方法获取到该对象,然后进行相关属性的设置,又或者使用RelativeLayout时,参考组件用的也是id!layout_width:组件的宽度,一般写:wrap_content或者match_parent......
  • odoo 后台开发(问题)
    1.Views视图button按钮属性type:主要使用action和objectobject:指定name="模型函数"action:指定name="%(record的id)d"context:传入上下文参数,如设置context="{'active_id':id}"则可以在模型文件使用环境上下文获取传入的值active_id=self.env.cont......
  • 2023很火的手机记事本APP
    在经济高速发展的今天,对于职场人士来说,时间是非常宝贵的,所以我们在工作中要时刻保持高效,能够准确的处理各种事项和工作任务。那么当工作中有很多信息需要记录、管理的时候,当有各种各样工作任务需要完成的时候,职场人士应该如何快速记录下来这些内容呢?  在2023年越来越多......
  • 可视化开发工具打破信息孤岛,提质又增效!
    相信在很长的一段时间内,信息孤岛、部门之间缺乏协作、数据难以整理等问题,都是很多企业在办公过程中遇到的常见问题。随着信息技术的发展,办公高效自动化已经成为无纸化办公的发展趋势了,应用可视化开发工具可以摒除这些缺陷,助力企业办公提质又增效。1、关于可视化开发工具什么是可......
  • vite 开发按需引入的组件库 rollup
    转载:https://blog.csdn.net/qq_27314517/article/details/128675552package.json{"name":"...","private":false,"version":"0.1.9","main":"./lib/index.umd.js","module&......
  • 一站式开发平台 加速企业数字化发展
    协同办公平台、经营管理平台、生产控制平台、数字决策支持体系……当前,新一轮科技革命方兴未艾,以数字技术为基座的数字化,正颠覆、重构着千行百业。数字化转型是信息技术引发的系统性变革,涉及单一应用、集成化、平台化、数据化、数智化等过程,需要循序渐进、持之以恒。但实际上,大部分......