Android记事本开发

简介: 数据库实现部分          界面设计 package com.jk;import java.util.List;import android.app.AlertDialog;import android.app.ListActivity;import android.content.Context;import android.content.DialogInterfa

数据库实现部分          界面设计

package com.jk;

import java.util.List;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.jk.R;
import com.jk.service.DbHelper;
import com.jk.service.DiaryAdapter;

public class MainActivity extends ListActivity {
	private static final int NEWDIARY = 0;
	private static final int HELP = 1;
	private static final int EXIT = 2;
	private static final int EDIT = 1;
	private static final int DELETE = 2;
	private static final int CANCEL = 4;
	private static final int DELETEALL = 3;
	private ListView listview;
	private int list_position;
	private DbHelper dbOpenHelper;
	private MyAdapter adapter;
	private List<Diary> mData;
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		dbOpenHelper = new DbHelper(this);
		showView();
	}
	// 刷新ListView界面数据
	public void showView() {
		setContentView(R.layout.main);
		listview = (ListView) findViewById(android.R.id.list);// 使用系统默认的list																
		DiaryAdapter diaryAdapter = new DiaryAdapter(this);   // ID资源标识符
		setTitle(getResources().getString(R.string.app_name)
				+ getResources().getString(R.string.gongyou) + " "
				+ (int) diaryAdapter.getCount() + " "
				+ getResources().getText(R.string.pianriji));
		if ((int) diaryAdapter.getCount() == 0) {
			setTitle(getResources().getString(R.string.app_name)
					+ getResources().getString(R.string.no_diary));
			Toast.makeText(MainActivity.this, R.string.No_data, 1).show();
		} else {
			mData = diaryAdapter.getScrollData(0, (int) diaryAdapter.getCount());
			adapter = new MyAdapter(this);
			listview.setAdapter(adapter);
			registerForContextMenu(getListView());
		}
	}
	// 创建菜单选项
	public boolean onCreateOptionsMenu(Menu menu) {
		menu.add(0, NEWDIARY, 0, R.string.menu_newDiary).setIcon(
				android.R.drawable.ic_menu_crop);
		menu.add(0, HELP, 0, R.string.menu_help).setIcon(
				android.R.drawable.ic_menu_help);
		menu.add(0, EXIT, 0, R.string.menu_exit).setIcon(
				android.R.drawable.ic_menu_close_clear_cancel);
		return super.onCreateOptionsMenu(menu);
	}
	// 菜单按钮点击事件处理
	public boolean onOptionsItemSelected(MenuItem item) {
		Intent intent = null;
		switch (item.getItemId()) {
		case NEWDIARY:
			intent = new Intent(MainActivity.this, NewDiaryActivity.class);
			startActivity(intent);
			break;
		case HELP:
			intent = new Intent(MainActivity.this, About.class);
			startActivity(intent);
			break;
		case EXIT:
			finish();
			break;
		}
		return super.onOptionsItemSelected(item);
	}

	// 单击每个列表项产生的事件
	protected void onListItemClick(ListView l, View v, int position, long id) {
		super.onListItemClick(l, v, position, id);
		Intent intent = new Intent();
		intent.putExtra("id", mData.get(position).getId());
		intent.putExtra("title", mData.get(position).getTitle());
		intent.putExtra("body", mData.get(position).getBody());
		intent.putExtra("time", mData.get(position).getTime());
		intent.setClass(MainActivity.this, ShowSingleDiary.class);
		startActivity(intent);
	}
	// 产生类似于windows上的右键菜单,轻松处理列表中的项	
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		super.onCreateContextMenu(menu, v, menuInfo);
		menu.setHeaderTitle(R.string.option).add(0, EDIT, 0,
				R.string.contextmenu_enter);
		menu.add(0, DELETE, 0, R.string.contextmenu_delete);
		menu.add(0, DELETEALL, 0, R.string.delete_all);
		menu.add(0, CANCEL, 0, R.string.new_cancelButton);
	}
	// 为上下文菜单写事件
	public boolean onContextItemSelected(MenuItem item) {
		// 在上下文菜单中得到点击的item的position,然后可对item进行操作
		list_position = ((AdapterContextMenuInfo) item.getMenuInfo()).position;// 列表位置从0开始
		Intent intent = new Intent();
		switch (item.getItemId()) {
		case EDIT:
			intent.putExtra("id", mData.get(list_position).getId());
			intent.putExtra("title", mData.get(list_position).getTitle());
			intent.putExtra("body", mData.get(list_position).getBody());
			intent.setClass(MainActivity.this, UpdateDiaryActivity.class);
			startActivity(intent);
			break;
		case DELETE:
			showOptional();
			break;
		case DELETEALL:
			showOptional2();
		case CANCEL:
		}
		return super.onContextItemSelected(item);
	}
	// 返回主页面时调用的函数
	protected void onRestart() {
		super.onRestart();
		showView();
	}
	public void showOptional() {
		new AlertDialog.Builder(this)
				.setTitle(R.string.AlertDialog_title)
				.setMessage(getResources().getString(R.string.optional_msg))
				.setPositiveButton(
						getResources().getString(R.string.optional_left),
						new OnClickListener() {
							public void onClick(DialogInterface dialog,
									int which) {
								DiaryAdapter adapter = new DiaryAdapter(
										MainActivity.this);
								adapter.delete(mData.get(list_position).getId()); // 注意索引ID
								showView();
							}
						})
				.setNegativeButton(
						getResources().getString(R.string.optional_right),
						new OnClickListener() {
							public void onClick(DialogInterface dialog,
									int which) {
								showView();
							}
						}).show();
	}
	public void showOptional2() {
		new AlertDialog.Builder(this)
				.setTitle(R.string.AlertDialog_title)
				.setMessage(getResources().getString(R.string.optional_msg))
				.setPositiveButton(
						getResources().getString(R.string.optional_left),
						new OnClickListener() {
							public void onClick(DialogInterface dialog,
									int which) {
								SQLiteDatabase db = dbOpenHelper
										.getWritableDatabase();
								db.delete("diary", null, null);
								db.close();
								Toast.makeText(MainActivity.this,
										R.string.Toast_deleteAll, 0).show();
								showView();
							}
						})
				.setNegativeButton(
						getResources().getString(R.string.optional_right),
						new OnClickListener() {
							public void onClick(DialogInterface dialog,
									int which) {
								showView();
							}
						}).show();
	}
	class MyAdapter extends BaseAdapter {
		ViewHolder holder;
		private LayoutInflater mInflater;
		public MyAdapter(Context context) {
			this.mInflater = LayoutInflater.from(context);
		}
		public int getCount() {
			return mData.size();
		}
		public Object getItem(int arg0) {
			return null;
		}
		public long getItemId(int position) {
			return 0;
		}
		public View getView(int position, View convertView, ViewGroup parent) {
			if (convertView == null) {
				holder = new ViewHolder();
				convertView = mInflater.inflate(R.layout.diary_item, null);
				holder.id = (TextView) convertView.findViewById(R.id.item_id);
				holder.title = (TextView) convertView.findViewById(R.id.item_title);
				holder.body = (TextView) convertView.findViewById(R.id.item_preRead);
				holder.time = (TextView) convertView.findViewById(R.id.item_time);
				convertView.setTag(holder);
			} else {
				holder = (ViewHolder) convertView.getTag();
			}
			holder.id.setText(mData.get(position).getId() + "");
			holder.title.setText(mData.get(position).getTitle());
			holder.body.setText(mData.get(position).getBody());
			holder.time.setText(mData.get(position).getTime());
			return convertView;
		}
	}
}


package com.jk;

import java.sql.Date;

import com.jk.R;
import com.jk.service.DiaryAdapter;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class NewDiaryActivity extends Activity {
private Button button_save;
private Button button_exit;
private EditText text_title;
private EditText text_body;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.newdiary);
		
		 findView();
		 setListener();
	}

	public void findView() {
		setTitle(R.string.createNew);
		button_save=(Button) findViewById(R.id.new_save);
		button_exit=(Button) findViewById(R.id.new_cancel);
		text_title = (EditText)findViewById(R.id.text_title);
		text_body = (EditText)findViewById(R.id.text_body);
		
		text_title.setHint(R.string.title_hint);
		text_body.setHint(R.string.body_hint);
	}
	
	public void setListener() {
		button_save.setOnClickListener(new View.OnClickListener(){
          //保存按钮点击事件
			@Override
			public void onClick(View v) {
				 DiaryAdapter adapter = new DiaryAdapter(NewDiaryActivity.this);
				 Diary diary = new Diary(text_title.getText().toString(), 
						text_body.getText().toString(),new Date(System.currentTimeMillis()).toString());
				 adapter.save(diary);
				 //提交后将输入框清空
				 text_title.setText("");
				 text_body.setText("");
				 button_exit.setText(R.string.resume);
				 text_body.clearFocus();//让焦点回到title上
				Toast.makeText(NewDiaryActivity.this, R.string.Toast_save, 0).show();
			}});
		
		button_exit.setOnClickListener(new View.OnClickListener(){

			@Override
			public void onClick(View v) {
			finish();
			}});
	}
	
}


package com.jk;

import com.jk.R;
import com.jk.R.id;
import com.jk.R.layout;
import com.jk.R.string;
import com.jk.service.DiaryAdapter;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;
/**
 * 这个版本的menu菜单是好的,可通过这个来修复新版本的menu菜单
 * @author Administrator
 *
 */
public  class ShowSingleDiary extends Activity {
	private TextView view_id;
	private TextView view_title;
	private TextView view_body;
	private TextView view_time;
	int id;
	private static final int MODIFY = 0;
	private static final int NEW = 1;
	private static final int DELETE = 2;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// 去掉Title
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		// 全屏
		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);

		showView();
	}

	public void showView() {
		Intent intent = getIntent();
		id = intent.getIntExtra("id", 0);
		String title = intent.getStringExtra("title");
		String body = intent.getStringExtra("body");
		String time = intent.getStringExtra("time");
		
		setContentView(R.layout.show_single_diary);
		view_id = (TextView)findViewById(R.id.simple_text_id);
		view_title = (TextView) findViewById(R.id.simple_text_title);
		view_body = (TextView) findViewById(R.id.simple_text_body);
		view_time= (TextView) findViewById(R.id.simple_text_time);
		
		view_id.setText(id+"");
		view_title.setText(title);
		view_body.setText(body);
		view_time.setText(time);
		
		view_id.setVisibility(TextView.INVISIBLE);
		
	}
	
	// 创建菜单选项
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		menu.add(0, MODIFY, 0, R.string.contextmenu_enter).setIcon(
				android.R.drawable.ic_menu_crop);
		menu.add(0, NEW, 0, R.string.menu_newDiary).setIcon(
				android.R.drawable.btn_star_big_on);
		menu.add(0, DELETE, 0, R.string.contextmenu_delete).setIcon(
				android.R.drawable.ic_menu_help);
		return super.onCreateOptionsMenu(menu);
	}

	// 菜单按钮点击事件处理
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		Intent intent = new Intent();
		switch (item.getItemId()) {
		case MODIFY:
			intent.putExtra("id",id);
			intent.putExtra("title",view_title.getText());
			intent.putExtra("body",view_body.getText());
			intent.setClass(ShowSingleDiary.this, UpdateDiaryActivity.class);					
			startActivity(intent);
			break;
		case NEW:
			intent.setClass(ShowSingleDiary.this, NewDiaryActivity.class);					
			startActivity(intent);
			break;
		case DELETE:
			showOptional();
			break;
		}
		return super.onOptionsItemSelected(item);
	}

	private void showOptional() {
		new AlertDialog.Builder(this)
		.setTitle(R.string.AlertDialog_title)
		.setMessage(getResources().getString(R.string.optional_msg))
		.setPositiveButton(getResources().getString(R.string.optional_left),new OnClickListener() {
					public void onClick(DialogInterface dialog,int which) {
						DiaryAdapter adapter = new DiaryAdapter(ShowSingleDiary.this);
						adapter.delete(id); // 注意索引ID
						finish();
					}
				})
		.setNegativeButton(getResources().getString(R.string.optional_right),new OnClickListener() {
					public void onClick(DialogInterface dialog,int which) {
						showView();
					}
				}).show();
	}	
}

package com.jk;

import java.sql.Date;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.jk.R;
import com.jk.R.id;
import com.jk.R.layout;
import com.jk.R.string;
import com.jk.service.DiaryAdapter;

public class UpdateDiaryActivity extends Activity {

	private EditText text_title;
	private EditText text_body;
	private Button button_save;
	private Button button_exit;
	private int id;
	private String title;
	private String body;
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.newdiary);
		showView();
		setListener();
	}

	public void showView() {
		Intent intent = getIntent();
	    id = intent.getIntExtra("id", 0);
		title = intent.getStringExtra("title");
		body = intent.getStringExtra("body");

		setTitle(R.string.title_update);
		text_title = (EditText) findViewById(R.id.text_title);
		text_body = (EditText) findViewById(R.id.text_body);
		button_save=(Button) findViewById(R.id.new_save);
		button_exit=(Button) findViewById(R.id.new_cancel);
		text_title.setText(title);
		text_body.setText(body);

	}

	public void setListener() {
		button_save.setOnClickListener(new View.OnClickListener() {
			// 保存按钮点击事件
			@Override
			public void onClick(View v) {
				DiaryAdapter adapter = new DiaryAdapter(
						UpdateDiaryActivity.this);
				Diary diary = new Diary(text_title.getText().toString(),
						text_body.getText().toString(), new Date(System
								.currentTimeMillis()).toString());
				diary.setId(id);
				adapter.update(diary);
				Toast.makeText(UpdateDiaryActivity.this, R.string.Toast_Update, 1)
						.show();
				finish();
			}
		});

		button_exit.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				finish();
			}
		});
	}
}

package com.jk;

import android.widget.TextView;

public class ViewHolder {
	public TextView id;
	public TextView title;  
    public TextView body;
    public TextView time;  

}

package com.jk;

import com.jk.R;
import com.jk.R.id;
import com.jk.R.layout;
import com.jk.R.string;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class About extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setTheme(android.R.style.Theme_Dialog);
		setContentView(R.layout.about);
		setTitle(R.string.about_window_title);
		TextView textView = (TextView) findViewById(R.id.about_title),
		textView2 = (TextView)findViewById(R.id.about_msg);
		textView.setText(R.string.about_title);
		textView2.setText("   " + getResources().getString(R.string.about_msg));
	}
}

package com.jk;

public class Diary {
	
	private int diaryId;
	private String title;
	private String body;
	private String time;
	
	public Diary(int diaryId, String title, String body, String time) {
		this.diaryId = diaryId;
		this.title = title;
		this.body = body;
		this.time = time;
	}

	public Diary( String title, String body, String time) {
		this(0, title, body ,time);
	}
	public int getId() {
		return diaryId;
	}

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

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getBody() {
		return body;
	}

	public void setBody(String body) {
		this.body = body;
	}

	public String getTime() {
		return time;
	}

	public void setTime(String time) {
		this.time = time;
	}
	public String toString() {
		return "Diary [diaryId=" + diaryId + ", title=" + title + ", body="
				+ body + ", time=" + time + "]";
	}
	
}


目录
相关文章
|
5天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
24 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
28天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
14 0
|
1月前
|
XML 缓存 Android开发
Android开发,使用kotlin学习多媒体功能(详细)
Android开发,使用kotlin学习多媒体功能(详细)
103 0
|
1月前
|
设计模式 人工智能 开发工具
安卓应用开发:构建未来移动体验
【2月更文挑战第17天】 随着智能手机的普及和移动互联网技术的不断进步,安卓应用开发已成为一个热门领域。本文将深入探讨安卓平台的应用开发流程、关键技术以及未来发展趋势。通过分析安卓系统的架构、开发工具和框架,本文旨在为开发者提供全面的技术指导,帮助他们构建高效、创新的移动应用,以满足不断变化的市场需求。
18 1
|
1月前
|
机器学习/深度学习 调度 Android开发
安卓应用开发:打造高效通知管理系统
【2月更文挑战第14天】 在移动操作系统中,通知管理是影响用户体验的关键因素之一。本文将探讨如何在安卓平台上构建一个高效的通知管理系统,包括服务、频道和通知的优化策略。我们将讨论最新的安卓开发工具和技术,以及如何通过这些工具提高通知的可见性和用户互动性,同时确保不会对用户造成干扰。
33 1
|
2天前
|
数据库 Android开发 开发者
安卓应用开发:构建高效用户界面的策略
【4月更文挑战第24天】 在竞争激烈的移动应用市场中,一个流畅且响应迅速的用户界面(UI)是吸引和保留用户的关键。针对安卓平台,开发者面临着多样化的设备和系统版本,这增加了构建高效UI的复杂性。本文将深入分析安卓平台上构建高效用户界面的最佳实践,包括布局优化、资源管理和绘制性能的考量,旨在为开发者提供实用的技术指南,帮助他们创建更流畅的用户体验。
|
19天前
|
XML 开发工具 Android开发
构建高效的安卓应用:使用Jetpack Compose优化UI开发
【4月更文挑战第7天】 随着Android开发不断进化,开发者面临着提高应用性能与简化UI构建流程的双重挑战。本文将探讨如何使用Jetpack Compose这一现代UI工具包来优化安卓应用的开发流程,并提升用户界面的流畅性与一致性。通过介绍Jetpack Compose的核心概念、与传统方法的区别以及实际集成步骤,我们旨在提供一种高效且可靠的解决方案,以帮助开发者构建响应迅速且用户体验优良的安卓应用。
|
21天前
|
监控 算法 Android开发
安卓应用开发:打造高效启动流程
【4月更文挑战第5天】 在移动应用的世界中,用户的第一印象至关重要。特别是对于安卓应用而言,启动时间是用户体验的关键指标之一。本文将深入探讨如何优化安卓应用的启动流程,从而减少启动时间,提升用户满意度。我们将从分析应用启动流程的各个阶段入手,提出一系列实用的技术策略,包括代码层面的优化、资源加载的管理以及异步初始化等,帮助开发者构建快速响应的安卓应用。
|
21天前
|
Java Android开发
Android开发之使用OpenGL实现翻书动画
本文讲述了如何使用OpenGL实现更平滑、逼真的电子书翻页动画,以解决传统贝塞尔曲线方法存在的卡顿和阴影问题。作者分享了一个改造后的外国代码示例,提供了从前往后和从后往前的翻页效果动图。文章附带了`GlTurnActivity`的Java代码片段,展示如何加载和显示书籍图片。完整工程代码可在作者的GitHub找到:https://github.com/aqi00/note/tree/master/ExmOpenGL。
23 1
Android开发之使用OpenGL实现翻书动画
|
21天前
|
Android开发 开发者
Android开发之OpenGL的画笔工具GL10
这篇文章简述了OpenGL通过GL10进行三维图形绘制,强调颜色取值范围为0.0到1.0,背景和画笔颜色设置方法;介绍了三维坐标系及与之相关的旋转、平移和缩放操作;最后探讨了坐标矩阵变换,包括设置绘图区域、调整镜头参数和改变观测方位。示例代码展示了如何使用这些方法创建简单的三维立方体。
18 1
Android开发之OpenGL的画笔工具GL10