第二个Android实战项目是记事本,同样,先放上代码:https://github.com/yzbkaka/kakaNote
源代码详解
1.布局
在主布局方面我先是舍弃了系统的ActionBar,用自己的start_title作为上方的标题;然后是使用一个LIstView和Material Design中的FloatingActionBar放在右下角作为新建按钮。
然后是在写便签的布局上,我是延用了主布局上的title,然后是将FloatingActionBar改成保存功能;而在中间的书写部分则是使用的EditText。
最后是查看界面,在点击了ListView上的子项之后就会跳转到查看界面,在查看界面我们可以进行点击title右边的小标志进行删除操作以及修改中间的EditText之后点击FloatingActionBar进行保存。
2.功能的实现
保存功能
保存功能其实就是使用数据库的基本操作,在这里我使用的是开源框架LitePal,具体的添加依赖以及创建映射的方法可以看这里Android框架1| LitePal。在创建完数据库之后就是要对用户写下的便签进行存储了,我这里是先获得EditText中的字符串,接着就是使用LitePal中的存储方法将数据进行存储。具体代码如下:
package com.example.yzbkaka.kakanote;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import com.example.yzbkaka.kakanote.db.Note;
public class WriteNote extends AppCompatActivity {
EditText input;
FloatingActionButton save;
String content;
Note note = new Note();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_write_note);
input = (EditText) findViewById(R.id.input);
save = (FloatingActionButton)findViewById(R.id.save);
save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
content = input.getText().toString();
note.setWriteContent(content);
note.save();
Toast.makeText(WriteNote.this, "保存成功", Toast.LENGTH_SHORT).show();
finish();
}
});
}
}
之后当我们点击保存之后就是会跳转到主界面,并且会有一段短消息Toast来提示我们保存成功。
显示已保存的便签功能
首先是在主活动中的onCreate()方法中进行一些初始化的操作,即对ListView的点击以及创建按钮功能的实现,这是比较简单的,就不多说了。这里主要介绍一下onStart()方法中显示已经保存的便签的思路,首先我们深入理解到Activity的生命周期,因为当我们在写完一条便签后点击保存便会回到主界面,但是在我们写的时候主活动是处于onStop()的状态,当我们返回的时候系统会连续调用onRestart()-onStart()方法,所以我们必须要在onStart()方法中进行读取操作。读取的操作其实就是遍历数据库,如果有内容则会显示到ListView当中,具体的代码实现是:
protected void onStart(){
super.onStart();
adapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,dataList);
noteList = LitePal.findAll(Note.class);
if(noteList.size()> 0){
dataList.clear();
for(Note note:noteList){
dataList.add(note.getWriteContent());
}
}
else{
dataList.clear();
}
listView.setAdapter(adapter);
}
删除和修改功能
当我们点击LIstView中的某一项时就会跳转到查看界面,在这里我们可以对便签进行删除或者修改,但是要注意我这里在启动Activity时是让Intent携带了便签的内容的,在LookNote.java中先获得intent中的所携带的便签中的信息,然后是显示在EditText中即可,如果要进行修改,则直接在EditText中进行修改,然后再使用LitePal中的更新操作即可。具体代码如下:
import android.content.Intent;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.yzbkaka.kakanote.db.Note;
import org.litepal.LitePal;
public class LookNote extends AppCompatActivity {
Button delete;
EditText input;
FloatingActionButton save;
Note note = new Note();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_look_note);
delete = (Button)findViewById(R.id.delete);
input = (EditText)findViewById(R.id.input);
save = (FloatingActionButton)findViewById(R.id.save);
Intent intent = getIntent();
final String oldContent = intent.getStringExtra("key");
input.setText(oldContent);
save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String newContent = input.getText().toString();
note.setWriteContent(newContent);
note.updateAll("writeContent = ?",oldContent);
Toast.makeText(LookNote.this, "保存成功", Toast.LENGTH_SHORT).show();
finish();
}
});
最后就是删除功能,我是直接使用LitePal中的删除操作进行的,代码对应如下:
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LitePal.deleteAll(Note.class,"writeContent = ?",oldContent);
Toast.makeText(LookNote.this, "删除成功", Toast.LENGTH_SHORT).show();
finish();
}
});
}
网友评论