一个简单的android便签app

源码下载

MainActivity.java

package com.zp.myfirstapp;import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import com.zp.myfirstapp.R;import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.Button;
import android.widget.ListView;public class MainActivity extends Activity implements OnClickListener,OnItemClickListener, OnItemLongClickListener {private Button add_bt;private ListView listV;private MyAdapter adapter;private List<Map<String, Object>> data_list;private FragmentManager manager;private OptionMenu menu;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();RefreshItem();}//重新加载listviewprivate void RefreshItem() {data_list.clear();String filePath = this.getFilesDir().toString();File folder = new File(filePath);File[] file = folder.listFiles();ArrayList<String> filenamelist = new ArrayList<String>();for (int i = 0; i < file.length; i++) {filenamelist.add(file[i].getAbsolutePath());}//降序//Collections.sort(filenamelist,Collections.reverseOrder());//升序Collections.sort(filenamelist);for (int i = 0; i < file.length; i++) {File filex = new File(filenamelist.get(i));String content = RWFile.readFile(filex);Map<String, Object> map = new HashMap<String, Object>();map.put("content", content);map.put("filename", getFileName(filex));map.put("isChecked", Boolean.FALSE);data_list.add(map);}adapter.notifyDataSetChanged();}//获取文件名public String getFileFullName(File file) {String path = file.getAbsolutePath();int index = path.lastIndexOf("/") + 1;String filefullname = path.substring(index);return filefullname;}public String getFileName(File file) {String filefullname = getFileFullName(file);int index = filefullname.lastIndexOf(".");String filename = filefullname.substring(0, index);return filename;}//初始化数据private void init() {add_bt = (Button) findViewById(R.id.add_bt);add_bt.setOnClickListener(this);listV = (ListView) findViewById(R.id.ListView);data_list = new ArrayList<Map<String, Object>>();adapter = new MyAdapter(this, data_list);listV.setAdapter(adapter);listV.setOnItemClickListener(this);listV.setOnItemLongClickListener(this);this.registerForContextMenu(listV);manager = getFragmentManager();}//设置按钮点击事件@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.add_bt: {Intent intent = new Intent(this, EditorActivity.class);startActivityForResult(intent, 0);break;}}}// 根据返回值执行不同事件@Overrideprotected void onActivityResult(int requestCode, int resultCode,Intent intent) {switch (resultCode) {case 0: {RefreshItem();break;}}super.onActivityResult(requestCode, resultCode, intent);}//设置item点击事件@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position,long id) {@SuppressWarnings("unchecked")Map<String, Object> map = (Map<String, Object>) adapter.getItem(position);Intent intent = new Intent(MainActivity.this, EditorActivity.class);Bundle bundle = new Bundle();bundle.putString("filename", map.get("filename").toString());intent.putExtras(bundle);startActivityForResult(intent, 0);}//设置item长按事件@Overridepublic boolean onItemLongClick(AdapterView<?> parent, View view,int position, long id) {menu = new OptionMenu();if(manager.getBackStackEntryCount()==0){FragmentTransaction transaction = manager.beginTransaction();transaction.replace(R.id.LinearLayout, menu);transaction.addToBackStack(null);transaction.commit();}adapter.setVisiblity(true);adapter.notifyDataSetChanged();add_bt.setVisibility(View.GONE);return true;}//按钮事件public void doclick(View view) {switch (view.getId()) {case R.id.SA_bt:for (int i = 0; i < data_list.size(); i++) {data_list.get(i).put("isChecked", true);}adapter.notifyDataSetChanged();break;case R.id.SN_bt:for (int i = 0; i < data_list.size(); i++) {data_list.get(i).put("isChecked", false);}adapter.notifyDataSetChanged();break;case R.id.RS_bt:for (int i = 0; i < data_list.size(); i++) {if ((Boolean) data_list.get(i).get("isChecked")) {data_list.get(i).put("isChecked", false);} else {data_list.get(i).put("isChecked", true);}}adapter.notifyDataSetChanged();break;case R.id.del_bt:for (int i = 0; i < data_list.size(); i++) {if ((Boolean) data_list.get(i).get("isChecked")) {String filepath = this.getFilesDir().toString() + "/"+ data_list.get(i).get("filename") + ".txt";File file = new File(filepath);file.delete();}}RefreshItem();adapter.notifyDataSetChanged();case R.id.cal_bt:add_bt.setVisibility(View.VISIBLE);onBackPressed();adapter.setVisiblity(false);adapter.notifyDataSetChanged();break;}}//设置返回按钮事件@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {// TODO Auto-generated method stubswitch (keyCode) {case KeyEvent.KEYCODE_BACK:onBackPressed();add_bt.setVisibility(View.VISIBLE);adapter.setVisiblity(false);adapter.notifyDataSetChanged();break;}return false;}
}

EditorActivity.java

package com.zp.myfirstapp;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;import com.zp.myfirstapp.R;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;public class EditorActivity extends Activity implements OnClickListener {private Button save_bt, del_bt;private EditText editT;private String filename;private String content;private Intent intent;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_editor);intent = getIntent();init();getFileName();}//获取从MainActivity中传过来的文件名private void getFileName() {// TODO Auto-generated method stubBundle bundle = intent.getExtras();if (bundle != null) {filename = bundle.get("filename") + ".txt";File file = new File(this.getFilesDir() + "/" + filename);editT.setText(RWFile.readFile(file));editT.setSelection(editT.getText().length());}}//初始化数据private void init() {// TODO Auto-generated method stubsave_bt = (Button) findViewById(R.id.save_bt);del_bt = (Button) findViewById(R.id.del_bt);save_bt.setOnClickListener(this);del_bt.setOnClickListener(this);editT = (EditText) findViewById(R.id.EditText);//获取当前时间,并设置为文件名SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");String date = sDateFormat.format(new Date());filename = date + ".txt";}//按钮点击的事件@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {case R.id.save_bt: {content = editT.getText().toString();if (!content.equals("")) {RWFile.writeFile(this.getFilesDir() + "/" + filename, content);setResult(0);} elsesetResult(1);finish();break;}case R.id.del_bt: {setResult(1);finish();break;}}}//如果内容不为空,则保存为txt文件public void saveText(String str) throws IOException {if (!str.equals("")) {FileOutputStream output = openFileOutput(filename, MODE_PRIVATE);output.write(str.getBytes());output.close();}}//设置返回键的事件@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {// TODO Auto-generated method stubswitch (event.getKeyCode()) {case KeyEvent.KEYCODE_BACK: {setResult(1, intent);finish();break;}}return super.onKeyDown(keyCode, event);}
}

MyAdapter.java

package com.zp.myfirstapp;import java.util.List;
import java.util.Map;import com.zp.myfirstapp.R;import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.SimpleAdapter;
import android.widget.TextView;public class MyAdapter extends BaseAdapter {private Boolean visiblity = false;private List<Map<String, Object>> list;private LayoutInflater mInflater;private ViewHolder holder;public MyAdapter(Context context, List<Map<String, Object>> list) {super();// TODO Auto-generated constructor stubthis.list = list;mInflater = LayoutInflater.from(context);}public int getCount() {// TODO Auto-generated method stubreturn list.size();}public Object getItem(int position) {// TODO Auto-generated method stubreturn list.get(position);}public long getItemId(int position) {// TODO Auto-generated method stubreturn position;}static class ViewHolder {public CheckBox checkB;public TextView content;public TextView data;}public View getView(final int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubif (convertView == null) {holder = new ViewHolder();convertView = mInflater.inflate(R.layout.item, null);holder.checkB = (CheckBox) convertView.findViewById(R.id.checkBox);holder.data = (TextView) convertView.findViewById(R.id.textView2);holder.content = (TextView) convertView.findViewById(R.id.textView1);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}holder.content.setText(list.get(position).get("content").toString());holder.data.setText(list.get(position).get("filename").toString());holder.checkB.setChecked((Boolean) list.get(position).get("isChecked"));//设置checkbox监视器,并根据checkbox的ischecked属性更改list中对应值holder.checkB.setOnCheckedChangeListener(new OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {// TODO Auto-generated method stublist.get(position).put("isChecked", isChecked);}});if (visiblity)holder.checkB.setVisibility(View.VISIBLE);elseholder.checkB.setVisibility(View.GONE);return convertView;}// 设置checkbox是否可见public void setVisiblity(Boolean b) {visiblity = b;}
}

OptinMenu.java

package com.zp.myfirstapp;import com.zp.myfirstapp.R;import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;public class OptionMenu extends Fragment{@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// TODO Auto-generated method stubView view=inflater.inflate(R.layout.optionmenu, null);return view;}
}

RWFile.java

package com.zp.myfirstapp;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;import android.util.Log;
import android.widget.Toast;public class RWFile {//读txt文件public static String readFile(File file) {try {FileInputStream inputStream = new FileInputStream(file);int len=inputStream.available();byte []buffer=new byte[len];inputStream.read(buffer);inputStream.close();String content=new String(buffer);return content;} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}//写txt文件public static void writeFile(String filename,String content) {File file = new File(filename);FileOutputStream outputStream;try {outputStream = new FileOutputStream(file);outputStream.write(content.getBytes());outputStream.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

activity_editor.xml

<LinearLayout 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:orientation="vertical"tools:context="${relativePackage}.${activityClass}" ><ScrollView android:layout_weight="9"android:layout_height="match_parent"android:layout_width="match_parent"><EditTextandroid:textSize="28sp"android:id="@+id/EditText"android:layout_width="match_parent"android:layout_height="fill_parent"android:background="@drawable/edittext_bg"android:hint="请输入内容" /></ScrollView><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="right" ><Buttonandroid:id="@+id/save_bt"android:layout_width="80dp"android:layout_height="wrap_content"android:focusable="true"android:text="@string/save" /><Buttonandroid:id="@+id/del_bt"android:layout_width="80dp"android:layout_height="wrap_content"android:text="@string/cancel" /></LinearLayout></LinearLayout>

activity_main.xml

<LinearLayout 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"tools:context="${relativePackage}.${activityClass}" android:orientation="vertical"><LinearLayout android:layout_width="fill_parent"android:layout_height="wrap_content"android:id="@+id/LinearLayout"android:orientation="horizontal"android:gravity="right"></LinearLayout><FrameLayoutandroid:layout_width="match_parent"android:layout_height="match_parent" ><ListView android:layout_height="fill_parent"android:layout_width="fill_parent"android:id="@+id/ListView"></ListView><Button android:onClick="doclick"android:id="@+id/add_bt"android:focusable="false"android:layout_gravity="bottom|right"android:background="@drawable/add_bt"android:layout_height="60dp"android:layout_width="60dp"/></FrameLayout></LinearLayout>

item.xml

<?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:orientation="vertical"><LinearLayout android:layout_height="wrap_content"android:layout_width="match_parent"android:orientation="horizontal"><TextViewandroid:layout_weight="9"android:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="55dp"android:maxLines="2"android:textSize="20sp" /><CheckBoxandroid:tag=""android:id="@+id/checkBox"android:visibility="gone"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_alignParentTop="true"android:focusable="false" /></LinearLayout><TextViewandroid:id="@+id/textView2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="right"android:textSize="15sp" /></LinearLayout>

optionmenu.xml

<?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:orientation="vertical"><LinearLayout android:layout_height="wrap_content"android:layout_width="match_parent"android:orientation="horizontal"><TextViewandroid:layout_weight="9"android:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="55dp"android:maxLines="2"android:textSize="20sp" /><CheckBoxandroid:tag=""android:id="@+id/checkBox"android:visibility="gone"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_alignParentTop="true"android:focusable="false" /></LinearLayout><TextViewandroid:id="@+id/textView2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="right"android:textSize="15sp" /></LinearLayout>

一个简单的android便签app相关推荐

  1. 基于android的便签app,便签app排行榜前十名安卓手机哪个高颜值便签好用?

    原标题:便签app排行榜前十名安卓手机哪个高颜值便签好用? 手机上用的便签app,在手机便签app排行榜前十名的便签哪个好用?安卓手机上用的便签app哪个好用? 对于这些问题,考虑的角度与衡量的标准不 ...

  2. 相见恨晚 一个有趣又好玩的小众便签App

    便签APP种类有很多,能让人长久使用的并不多.这不单是因为使用便签的人口味越来越刁,也因为手机应用市场里便签类应用多,用户的选择范围大.但是总有那么一些小众的便签,功能有趣又好玩,而且让人相见恨晚.敬 ...

  3. 有没有一个可以录音的便签?说话可以变成文字形式的app

    便签APP是我们常用的记事工具之一,对于使用便签频繁的人来说,便签在工作和生活中起着重要的作用,没有便签记录和提醒,可能会遗忘非常重要的事情.随着对便签的依赖程度越高,对便签软件的要求就越高,用手打字 ...

  4. android记事本添加图片功能,安卓手机上有什么便签app既可以写日记又可以添加照片?...

    原标题:安卓手机上有什么便签app既可以写日记又可以添加照片? 当前,有很多人一直保持着写日记的习惯,因为这样可以及时记录自己的成长轨迹,使得自己可以追寻到时光的记忆,但是我们记录日记的工具,却随着时 ...

  5. android app定时提醒,安卓手机上有没有每10分钟间隔定时提醒一次的便签app软件?...

    原标题:安卓手机上有没有每10分钟间隔定时提醒一次的便签app软件? 现在的智能手机基本上分为两大阵营:苹果和安卓.安卓手机品牌众多,所以使用的人也多.当然了,这也和安卓手有价格方面的优势有很大关系. ...

  6. android手机语言备忘录,安卓语音备忘录在哪里?安卓手机怎么添加一款语音便签app...

    原标题:安卓语音备忘录在哪里?安卓手机怎么添加一款语音便签app 较高版本的iOS系统上有一款名叫"语音备忘录"的app,这是苹果系统自带的一款语音备忘工具,很好用.只是,这款语音 ...

  7. 手机桌面便签app哪个比较好用

    俗话说好记性不如烂笔头,随手记事是让我们摆脱遗忘的法宝之一.以前人们记事都喜欢用纸质记事本,如今在便签APP上记事成了主流.在手机上记事,几乎是每一个智能手机用户的需求.现在网络上手机便签的种类有很多 ...

  8. 手机便签APP下载安装

    在每一个人的手机上应该都会有一款记录备忘事项的便签或者备忘录软件,现代人的生活节奏比较快,丢东忘西是一种常态,而借助手机上好用的备忘录或者便签APP则可以帮助大家将这些丢失的记忆整合起来,以防忘记. ...

  9. 安卓定时启动软件app_便签app排行榜前十名安卓手机哪个高颜值便签软件好用?...

    手机上用的便签app,在手机便签app排行榜前十名的便签软件哪个好用?安卓手机上用的便签app哪个好用? 对于这些问题,考虑的角度与衡量的标准不同,所得出的答案想必也会不同,对于小编这个即将踏入职场的 ...

最新文章

  1. 【 FPGA 】UltraFast设计方法学笔记(RTL代码风格1)
  2. java jtable行标题_如何设置JTable的标题——如图
  3. unity3d中画线有几种方式_【源码】Unity3D运行期间如何绘制直线-百度经验
  4. 移动Web开发图片自适应两种常见情况解决方案
  5. Python脱产8期 Day09 2019/4/23
  6. win10自启动文件夹目录
  7. CentOS 安装宋体字体
  8. 杭电1018 Big Number
  9. 如何免安装服务器将 React 整合进 Spring Boot
  10. Nginx学习_狂神
  11. vue+filter过滤器(多参数)传参 - 代码篇
  12. SSM项目使用Idea打war包
  13. js 经常用到的键盘码
  14. 中国教育与软件企业的共同误区
  15. [转载] PYTHON 网络编程
  16. AHK生成随机但不重复的数字
  17. 用Unity写设计模式-外观模式
  18. SQL Server 【不允许保存更改】问题解决图解
  19. 【数理统计】卡方检验
  20. NVIDIA GeForce Experience登录报错:验证程序加载失败,请检查您的浏览器设置,例如广告拦截程序(解决办法)

热门文章

  1. R语言获取特定时间段的数据
  2. Netflix DGS Note
  3. 痞子衡嵌入式:MCUBootUtility v2.0来袭,i.MXRT1010哪里跑
  4. 什么是SAFe? SAFe管理工具
  5. 1079 -- 周期串
  6. 求自然数的平方和python_查找最大N,以使Python中前N个自然数的平方和不超过X
  7. 路漫漫其修远兮 吾将上下而求索
  8. 温度是影响计算机,CPU温度过高会造成什么影响_CPU温度过高影响介绍 - 系统家园...
  9. 硬盘故障案例分享——硬盘丢失及容量丢失
  10. 数据库内连接与外连接