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 + "]";
	}
	
}


目录
相关文章
|
1月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
1月前
|
缓存 前端开发 Android开发
安卓开发中的自定义视图:从零到英雄
【10月更文挑战第42天】 在安卓的世界里,自定义视图是一块画布,让开发者能够绘制出独一无二的界面体验。本文将带你走进自定义视图的大门,通过深入浅出的方式,让你从零基础到能够独立设计并实现复杂的自定义组件。我们将探索自定义视图的核心概念、实现步骤,以及如何优化你的视图以提高性能和兼容性。准备好了吗?让我们开始这段创造性的旅程吧!
29 1
|
1月前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
24天前
|
搜索推荐 前端开发 API
探索安卓开发中的自定义视图:打造个性化用户界面
在安卓应用开发的广阔天地中,自定义视图是一块神奇的画布,让开发者能够突破标准控件的限制,绘制出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战技巧,逐步揭示如何在安卓平台上创建和运用自定义视图来提升用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你的应用在众多同质化产品中脱颖而出。
48 19
|
1月前
|
IDE Java 开发工具
移动应用与系统:探索Android开发之旅
在这篇文章中,我们将深入探讨Android开发的各个方面,从基础知识到高级技术。我们将通过代码示例和案例分析,帮助读者更好地理解和掌握Android开发。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧。让我们一起开启Android开发的旅程吧!
|
24天前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
52 14
|
27天前
|
Java Linux 数据库
探索安卓开发:打造你的第一款应用
在数字时代的浪潮中,每个人都有机会成为创意的实现者。本文将带你走进安卓开发的奇妙世界,通过浅显易懂的语言和实际代码示例,引导你从零开始构建自己的第一款安卓应用。无论你是编程新手还是希望拓展技术的开发者,这篇文章都将为你打开一扇门,让你的创意和技术一起飞扬。
|
25天前
|
XML 存储 Java
探索安卓开发之旅:从新手到专家
在数字时代,掌握安卓应用开发技能是进入IT行业的关键。本文将引导读者从零基础开始,逐步深入安卓开发的世界,通过实际案例和代码示例,展示如何构建自己的第一个安卓应用。我们将探讨基本概念、开发工具设置、用户界面设计、数据处理以及发布应用的全过程。无论你是编程新手还是有一定基础的开发者,这篇文章都将为你提供宝贵的知识和技能,帮助你在安卓开发的道路上迈出坚实的步伐。
32 5
|
24天前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
|
25天前
|
XML 搜索推荐 前端开发
安卓开发中的自定义视图:打造个性化UI组件
在安卓应用开发中,自定义视图是一种强大的工具,它允许开发者创造独一无二的用户界面元素,从而提升应用的外观和用户体验。本文将通过一个简单的自定义视图示例,引导你了解如何在安卓项目中实现自定义组件,并探讨其背后的技术原理。我们将从基础的View类讲起,逐步深入到绘图、事件处理以及性能优化等方面。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。