一个简易便签
代码有一大部分是借鉴别人的,赶时间为了完成任务,所以直接抄了很多。
就是一个很简易的便签,主要用到的技术就是数据库的技术。界面很简洁,亲自设计。
然后就把代码放在这里吧。
1.界面布局
(1)主界面
(2)新建界面
(3)删除界面
(4)分享界面
2.布局代码实现
(1)主界面的布局
<RelativeLayout 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:background="#efefef"
android:paddingLeft="13dp"
android:paddingRight="13dp"
android:paddingBottom="5dp"
android:paddingTop="5dp"
tools:context=".MainActivity" >
<ListView
android:id="@+id/lv_bwlList"
android:divider="#00000000"
android:dividerHeight="9dp"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<ImageButton
android:id="@+id/btnAdd"
android:layout_width="70dp"
android:layout_height="70dp"
android:scaleType="centerCrop"
android:src="@mipmap/addd"
android:alpha="70"
android:background="#00ffffff"
android:layout_margin="10dp"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
(2)新建界面的布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_margin="10dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="vertical"
android:weightSum="1">
<TextView
android:id="@+id/textView1"
android:textSize="20sp"
android:textColor="#636363"
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/title" />
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:paddingLeft="5dp"
android:textColor="#626366"
android:background="@null"
android:ems="10">
<requestFocus />
</EditText>
<TextView
android:id="@+id/textView2"
android:textSize="20sp"
android:textColor="#636363"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/content" />
<EditText
android:id="@+id/editText2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="top"
android:textColor="#626366"
android:background="@null"
android:layout_marginTop="12dp"
android:layout_marginBottom="5dp"
android:paddingLeft="5dp" />
</LinearLayout>
<ImageButton
android:id="@+id/saveButton"
android:layout_width="70dp"
android:layout_height="70dp"
android:scaleType="centerCrop"
android:src="@mipmap/save"
android:alpha="70"
android:background="#00ffffff"
android:layout_margin="10dp"
android:layout_gravity="center"/>
</LinearLayout>
(3)ListView子项布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#FFFFFF">
<TextView
android:id="@+id/textView1"
android:layout_width="0dp"
android:layout_height="90dp"
android:layout_weight="1"
android:paddingLeft="15dp"
android:textColor="#3d3d3d"
android:gravity="center_vertical"
android:textSize="16sp"
android:text="@string/title2" />
<TextView
android:id="@+id/textView2"
android:textSize="13sp"
android:layout_width="wrap_content"
android:layout_height="90dp"
android:gravity="center"
android:paddingRight="10dp"
android:text="@string/time" />
</LinearLayout>
2.菜单代码实现
(1)主界面菜单
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/item1"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/New"/>
<item
android:id="@+id/item2"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/back"/>
</menu>
(2)新建界面菜单
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/share"/>
</menu>
3.数据库代码实现
(1)存放数据的类
public class Cuns {
private String title; //标题
private String content; //内容
private String times; //时间
private int ids; //编号
public Cuns(String ti,int id,String con ,String time){
this.ids=id;
this.title=ti;
this.content=con;
this.times=time;
}
public Cuns(String ti,String con,String time){
this.title=ti;
this.content=con;
this.times=time;
}
public Cuns(int i,String ti,String time){
this.ids=i;
this.title=ti;
this.times=time;
}
public Cuns(String ti,String con){
this.title=ti;
this.content=con;
}
public int getIds() {
return ids;
}
public String getTitle() {
return title;
}
public String getContent() {
return content;
}
public String getTimes() {
return times;
}
}
(2)新建 MyOpenHelper 类继承自 SQLiteOpenHelper 类
/*
* 重写了SQLiteOpenHelper类,用来建立数据库和表
*/
public class MyOpenHelper extends SQLiteOpenHelper{
public MyOpenHelper(Context context) {
super(context, "mydate", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table mybook(" +
"ids integer PRIMARY KEY autoincrement," +
"title text," +
"content text," +
"times text)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
(3)新建 MyDataBase 类用来操作数据库
public class MyDataBase {
Context context;
MyOpenHelper myHelper;
SQLiteDatabase myDatabase;
/*
* 别的类实例化这个类的同时,创建数据库
*/
public MyDataBase(Context con){
this.context=con;
myHelper=new MyOpenHelper(context);
}
/*
* 得到ListView的数据,从数据库里查找后解析
*/
public ArrayList<Cuns> getArray(){
ArrayList<Cuns> array = new ArrayList<Cuns>();
ArrayList<Cuns> array1 = new ArrayList<Cuns>();
myDatabase = myHelper.getWritableDatabase();
Cursor cursor=myDatabase.rawQuery("select ids,title,times from mybook" , null);
cursor.moveToFirst();
while(!cursor.isAfterLast()){
int id = cursor.getInt(cursor.getColumnIndex("ids"));
String title = cursor.getString(cursor.getColumnIndex("title"));
String times = cursor.getString(cursor.getColumnIndex("times"));
Cuns cun = new Cuns(id, title, times);
array.add(cun);
cursor.moveToNext();
}
myDatabase.close();
for (int i = array.size(); i >0; i--) {
array1.add(array.get(i-1));
}
return array1;
}
/*
* 返回可能要修改的数据
*/
public Cuns getTiandCon(int id){
myDatabase = myHelper.getWritableDatabase();
Cursor cursor=myDatabase.rawQuery("select title,content from mybook where ids='"+id+"'" , null);
cursor.moveToFirst();
String title=cursor.getString(cursor.getColumnIndex("title"));
String content=cursor.getString(cursor.getColumnIndex("content"));
Cuns cun=new Cuns(title,content);
myDatabase.close();
return cun;
}
/*
* 用来修改日记
*/
public void toUpdate(Cuns cun){
myDatabase = myHelper.getWritableDatabase();
myDatabase.execSQL(
"update mybook set title='"+ cun.getTitle()+
"',times='"+cun.getTimes()+
"',content='"+cun.getContent() +
"' where ids='"+ cun.getIds()+"'");
myDatabase.close();
}
/*
* 用来增加新的日记
*/
public void toInsert(Cuns cun){
myDatabase = myHelper.getWritableDatabase();
myDatabase.execSQL("insert into mybook(title,content,times)values('"
+ cun.getTitle()+"','"
+cun.getContent()+"','"
+cun.getTimes()
+"')");
myDatabase.close();
}
/*
* 长按点击后选择删除日记
*/
public void toDelete(int ids){
myDatabase = myHelper.getWritableDatabase();
myDatabase.execSQL("delete from mybook where ids="+ids+"");
myDatabase.close();
}
}
4.自定义 Adapter
/*
* 自定义的ListView的Adapter
*/
public class MyAdapter extends BaseAdapter{
LayoutInflater inflater;
ArrayList<Cuns> array;
public MyAdapter(LayoutInflater inf,ArrayList<Cuns> arry){
this.inflater=inf;
this.array=arry;
}
@Override
public int getCount() {
return array.size();
}
@Override
public Object getItem(int position) {
return array.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder vh;
if(convertView==null){
vh=new ViewHolder();
convertView=inflater.inflate(R.layout.list_item, null);//注意导包,别导系统包
vh.tv1=(TextView) convertView.findViewById(R.id.textView1);
vh.tv2=(TextView) convertView.findViewById(R.id.textView2);
convertView.setTag(vh);
}
vh=(ViewHolder) convertView.getTag();
vh.tv1.setText(array.get(position).getTitle());
vh.tv2.setText(array.get(position).getTimes());
return convertView;
}
class ViewHolder{
TextView tv1,tv2;
}
}
5.Activity代码实现
(1)主界面 Activity 代码
/*
* 这个类主要包括五个点击事件,分别为
* ListView的长按点击事件,用来AlertDialog来判断是否删除数据。
* ListView的点击事件,跳转到第二个界面,用来修改数据
* 新建便签按钮的点击事件,跳转到第二界面,用来新建便签
* menu里的退出事件,用来退出程序
* menu里的新建事件,用来新建便签
*/
public class MainActivity extends AppCompatActivity {
ImageButton imageButton;
ListView lv;
LayoutInflater inflater;
ArrayList<Cuns> array;
MyDataBase mdb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv=(ListView) findViewById(R.id.lv_bwlList);
imageButton=(ImageButton) findViewById(R.id.btnAdd);
inflater=getLayoutInflater();
mdb=new MyDataBase(this);
array=mdb.getArray();
MyAdapter adapter=new MyAdapter(inflater,array);
lv.setAdapter(adapter);
/*
* 点击listView里面的item,用来修改日记
*/
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
Intent intent=new Intent(getApplicationContext(),NewNote.class);
intent.putExtra("ids",array.get(position).getIds() );
startActivity(intent);
MainActivity.this.finish();
}
});
/*
* 长点后来判断是否删除数据
*/
lv.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
final int position, long id) {
//AlertDialog,来判断是否删除日记。
new AlertDialog.Builder(MainActivity.this)
.setTitle("删除")
.setMessage("是否删除笔记")
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mdb.toDelete(array.get(position).getIds());
array=mdb.getArray();
MyAdapter adapter=new MyAdapter(inflater,array);
lv.setAdapter(adapter);
}
})
.create().show();
return true;
}
});
/*
* 按钮点击事件,用来新建日记
*/
imageButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(getApplicationContext(),NewNote.class);
startActivity(intent);
MainActivity.this.finish();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.item1:
Intent intent=new Intent(getApplicationContext(),NewNote.class);
startActivity(intent);
this.finish();
break;
case R.id.item2:
this.finish();
break;
default:
break;
}
return true;
}
}
(2)新建界面 Activity 代码
public class NewNote extends AppCompatActivity {
EditText ed1,ed2;
ImageButton imageButton;
MyDataBase myDatabase;
Cuns cun;
int ids;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_note);
ed1=(EditText) findViewById(R.id.editText1);
ed2=(EditText) findViewById(R.id.editText2);
imageButton=(ImageButton) findViewById(R.id.saveButton);
myDatabase=new MyDataBase(this);
Intent intent=this.getIntent();
ids=intent.getIntExtra("ids", 0);
//默认为0,不为0,则为修改数据时跳转过来的
if(ids!=0){
cun=myDatabase.getTiandCon(ids);
ed1.setText(cun.getTitle());
ed2.setText(cun.getContent());
}
//保存按钮的点击事件,他和返回按钮是一样的功能,所以都调用isSave()方法;
imageButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
isSave();
}
});
}
/*
* 返回按钮调用的方法。
*/
@Override
public void onBackPressed() {
//super.onBackPressed();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
Date curDate = new Date(System.currentTimeMillis());//获取当前时间
String times = formatter.format(curDate);
String title=ed1.getText().toString();
String content=ed2.getText().toString();
//是要修改数据
if(ids!=0){
cun=new Cuns(title,ids, content, times);
myDatabase.toUpdate(cun);
Intent intent=new Intent(NewNote.this,MainActivity.class);
startActivity(intent);
NewNote.this.finish();
}
//新建日记
else{
if(title.equals("")&&content.equals("")){
Intent intent=new Intent(NewNote.this,MainActivity.class);
startActivity(intent);
NewNote.this.finish();
}
else{
cun=new Cuns(title,content,times);
myDatabase.toInsert(cun);
Intent intent=new Intent(NewNote.this,MainActivity.class);
startActivity(intent);
NewNote.this.finish();
}
}
}
private void isSave(){
SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
Date curDate = new Date(System.currentTimeMillis());//获取当前时间
String times = formatter.format(curDate);
String title=ed1.getText().toString();
String content=ed2.getText().toString();
//是要修改数据
if(ids!=0){
cun=new Cuns(title,ids, content, times);
myDatabase.toUpdate(cun);
Intent intent=new Intent(NewNote.this,MainActivity.class);
startActivity(intent);
NewNote.this.finish();
}
//新建日记
else{
cun=new Cuns(title,content,times);
myDatabase.toInsert(cun);
Intent intent=new Intent(NewNote.this,MainActivity.class);
startActivity(intent);
NewNote.this.finish();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.second, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_settings:
Intent intent=new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT,
"标题:"+ed1.getText().toString()+" " +
"内容:"+ed2.getText().toString());
startActivity(intent);
break;
default:
break;
}
return false;
}
}
6.附
<resources>
<string name="app_name">便签</string>
<string name="title">标题:</string>
<string name="content">内容:</string>
<string name="title2">无标题:</string>
<string name="time">年/月/日 时间</string>
<string name="New">新建</string>
<string name="back">退出</string>
<string name="share">分享</string>
</resources>
7.又是然后
该复习准备考试了啊!呵呵