初學者學習android,做這個小demo時遇到過很多挫折。具體不說了。就簡單的說一下這個demo的思路。
1、寫一個實體類,裏面定義這個demo需要的內容,然後寫getXX()和setXX()。
2、首先新建一個數據庫類繼承SQLiteOpenHelper。在這個類裏面進行創建數據庫,數據庫版本,數據表。
3、然後新建一個類用來對數據庫進行增刪查改操作。
4、寫一個適配器,是view能在listview上展示的橋樑。
5、對各個頁面寫代碼實現功能。
1、寫一個實體類,裏面定義這個demo需要的內容,然後寫getXX()和setXX()
public class note implements Serializable {
private int id;
private String title;
private String time;
private String content;
//必須要有無參構造函數
public note(){
}
//有參構造函數
public note(int id,String title,String time,String content){
this.id=id;
this.title=title;
this.time=time;
this.content=content;
}
public String getTitle(){
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getTime(){
return time;
}
public void setTime(String time){
this.time=time;
}
public String getContent(){
return content;
}
public void setContent(String content){
this.content=content;
}
public Integer getId(){
return id;
}
public void setId(int id){
this.id=id;
}
}
2、新建一個數據庫類繼承SQLiteOpenHelper。在這個類裏面進行創建數據庫,數據庫版本,數據表。
public class MyNoteHelper extends SQLiteOpenHelper{
//數據庫名稱
private static final String DATABASE_NAME="noteDB.db";
//數據庫版本
private static int DATABASE_VERSION=1;
//構造函數
public MyNoteHelper(Context context){
super(context,DATABASE_NAME,null,DATABASE_VERSION);
}
//創建表
public static final String CREATE_TABLE="CREATE TABLE IF NOT EXISTS MyNotes2("+"id integer primary key autoincrement,"+"title TEXT,"+"time TEXT ,"+"content TEXT)";
@Override
public void onCreate(SQLiteDatabase db){
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
db.execSQL("ALTER TABLE MyNotes2 ADD COLUMN other String");
onCreate(db);
}
}
2、新建一個類用來對數據庫進行增刪查改操作。
public class NoteManager {
private MyNoteHelper helper;
private SQLiteDatabase db;
private Context context;
public NoteManager(Context context){
helper= new MyNoteHelper(context);
db=helper.getWritableDatabase();//打開一個讀寫的數據庫
this.context=context;
}
//插入
public boolean insert(note note){
db.beginTransaction();//開始事務鎖
try {
db.execSQL("INSERT INTO MyNotes2 VALUES(?,?,?,?)",new Object[]{note.getId(),note.getTitle(),note.getTime(),note.getContent()});
db.setTransactionSuccessful();//完成事務鎖
return true;
}catch (Exception e){
e.printStackTrace();
return false;
}finally {
db.endTransaction();//結束事務鎖
}
}
//刪除
public void delete(note note){
db.delete("MyNotes2", "id=?", new String[]{String.valueOf(note.getId())});
}
//查詢
public List<note> query() {
List<note> notes = new ArrayList<>();
Cursor c = queryItem();
while (c.moveToNext()) {
note note = new note();
note.setId(c.getInt(c.getColumnIndex("id")));
note.setTitle(c.getString(c.getColumnIndex("title")));
note.setContent(c.getString(c.getColumnIndex("content")));
note.setTime(c.getString(c.getColumnIndex("time")));
notes.add(note);
}
c.close();
return notes;
}
//更新
public boolean update(note note){
db.beginTransaction();
try {
ContentValues values=new ContentValues();
values.put("title",note.getTitle());
values.put("content",note.getContent());
values.put("time", note.getTime());
db.update("MyNotes2", values, "id=?", new String[]{String.valueOf(note.getId())});
db.setTransactionSuccessful();
return true;
}catch (Exception e){
e.printStackTrace();
return false;
}finally {
db.endTransaction();
}
}
public Cursor queryItem(){
return db.rawQuery("SELECT * FROM MyNotes2",null);
//return cursor;
}
//關閉數據庫
public void closeDB(){
db.close();
}
}
4、適配器
public class MyAdapter extends BaseAdapter{
private List<note> noteList;
private LayoutInflater inflater;
private Context context=null;
public MyAdapter(Context context,List<note> noteList){
this.context=context;
this.noteList=noteList;
inflater=LayoutInflater.from(context);
}
@Override
public int getCount(){
return noteList.size();
}
@Override
public Object getItem(int position){
return noteList.get(position);
}
@Override
public long getItemId(int position){
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView==null){
convertView=inflater.inflate(R.layout.layout,null);
holder=new ViewHolder();
holder.title=(TextView)convertView.findViewById(R.id.title_view);
holder.time=(TextView)convertView.findViewById(R.id.time_view);
//holder.title.setClickable(true);
//holder.time.setFocusable(false);
holder.title.setTextColor(Color.BLACK);
holder.title.setTextSize(30);
holder.time.setTextColor(Color.BLACK);
//holder.title.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);
//holder.time.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);
//holder.Content=(TextView)convertView.findViewById(R.id.);
convertView.setTag(holder);
}else{
holder=(ViewHolder)convertView.getTag();
}
holder.title.setText(noteList.get(position).getTitle());
holder.time.setText(noteList.get(position).getTime());
return convertView;
}
class ViewHolder{
TextView title,time;
}
}
5、listview主頁面(MainActivity.class)
public class MainActivity extends AppCompatActivity {
private NoteManager noteManager;
private MyAdapter adapter;
private List<note> notes=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
noteManager=new NoteManager(this);
initView();
}
@Override
public void onResume(){
super.onResume();
initView();
adapter.notifyDataSetChanged();
}
@Override
public void onDestroy(){
super.onDestroy();
noteManager.closeDB();
}
public void initView(){
notes=noteManager.query();
adapter=new MyAdapter(this,notes);
final ListView listView=(ListView)findViewById(R.id.lv);
listView.setAdapter(adapter);
Button btn=(Button)findViewById(R.id.newBtn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i=new Intent(MainActivity.this,AddActivity.class);
startActivity(i);
}
});
//長按刪除
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) {
final AlertDialog.Builder mDialog=new AlertDialog.Builder(MainActivity.this);
mDialog.setTitle("提示!");
mDialog.setMessage("確定刪除?");
mDialog.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,int which) {
dialog.dismiss();
noteManager.delete(notes.get(position));
notes.remove(position);
adapter.notifyDataSetChanged();
}
});
mDialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,int which) {
dialog.dismiss();
}
});
mDialog.setCancelable(true);
mDialog.show();
return true;
}
});
//單擊編輯
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(MainActivity.this, InActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable("inDetail", notes.get(position));
intent.putExtras(bundle);
startActivity(intent);
}
});
}
詳情頁(InActivity.class)
public class InActivity extends AppCompatActivity {
private NoteManager noteManager;
private note note=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_in);
noteManager=new NoteManager(this);
init();
click1();//修改
click2();//保存
}
//修改
private void click1(){
Button updateBtn=(Button)findViewById(R.id.upgradeBtn);
updateBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText title = (EditText) findViewById(R.id.title_ined);
EditText content = (EditText) findViewById(R.id.content_ined);
title.setEnabled(true);//設置爲可寫狀態
content.setEnabled(true);//設置爲可寫狀態
title.setTextColor(Color.BLACK);
content.setTextColor(Color.BLACK);
}
});
}
//保存
private void click2(){
Button saveBtn=(Button)findViewById(R.id.save_inBtn);
saveBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
updateDetail();
}
});
}
private void init(){
EditText title=(EditText)findViewById(R.id.title_ined);
EditText time=(EditText)findViewById(R.id.time_tvin);
EditText content=(EditText)findViewById(R.id.content_ined);
Intent intent=this.getIntent();
note=(note)intent.getSerializableExtra("inDetail");
title.setText(note.getTitle());
content.setText(note.getContent());
title.setEnabled(false);
content.setEnabled(false);
time.setEnabled(false);
title.setTextColor(Color.GRAY);
content.setTextColor(Color.GRAY);
}
private void updateDetail(){
EditText title=(EditText)findViewById(R.id.title_ined);
EditText content=(EditText)findViewById(R.id.content_ined);
String title1=title.getText().toString();
String content1=content.getText().toString();
SimpleDateFormat format=new SimpleDateFormat("MM-dd HH:mm");
Date date=new Date(System.currentTimeMillis());
String time1=format.format(date);
note note1=new note();
note1.setId(note.getId());
note1.setTitle(title1);
note1.setContent(content1);
note1.setTime(time1);
if(noteManager.update(note1)){
Toast.makeText(this,"更改成功!",Toast.LENGTH_LONG).show();
Intent intent=new Intent(InActivity.this,MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
finish();
}else{
Toast.makeText(this,"更新失敗,保存不成功!",Toast.LENGTH_LONG).show();
}
}
新建頁(AddActivity.class)
public class AddActivity extends AppCompatActivity {
private NoteManager noteManager;
private SharedPreferences sharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add);
noteManager=new NoteManager(this);
click();
}
@Override
public void onDestroy() {
super.onDestroy();
noteManager.closeDB();
}
public void add(){
EditText ed_title=(EditText)findViewById(R.id.title_ed);
EditText ed_content=(EditText)findViewById(R.id.content_ed);
String title=ed_title.getText().toString().trim();
String content=ed_content.getText().toString();
SimpleDateFormat format=new SimpleDateFormat("MM-dd HH:mm");
Date date=new Date(System.currentTimeMillis());
String time=format.format(date);
int id=getPreferences();
note note=new note();
note.setId(id);
note.setTitle(title);
note.setContent(content);
note.setTime(time);
if(title.equals("")||content.equals("")){
Toast.makeText(this,"請填寫標題和內容",Toast.LENGTH_LONG).show();
return;
}
if(noteManager.insert(note)){
getIdEditor(id);
Toast.makeText(this,"保存成功!",Toast.LENGTH_LONG).show();
Toast.makeText(this,"id"+id,Toast.LENGTH_LONG).show();
Intent intent=new Intent(AddActivity.this,MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
finish();
}else{
Toast.makeText(this,"保存不成功!",Toast.LENGTH_LONG).show();
Toast.makeText(this,"id"+id,Toast.LENGTH_LONG).show();
}
noteManager.closeDB();//關閉數據庫
}
private int getPreferences(){
sharedPreferences=getSharedPreferences("id",Context.MODE_PRIVATE);
return sharedPreferences.getInt("id",1);
}
private int getIdEditor(int id){
SharedPreferences.Editor editor=sharedPreferences.edit();
editor.putInt("id",++id);
editor.commit();
return id;
}
private void click(){
Button saveBtn=(Button)findViewById(R.id.saveBtn);
saveBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
add();
}
});
}
item佈局:layout
<?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:layout_margin="15dp"
android:layout_marginBottom="25dp"
<!--下面這條語句是防止子類控件的點擊事件觸發而導致listview的點擊事件無法觸發-->
android:descendantFocusability="blocksDescendants"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/title_view"
android:layout_weight="2" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:inputType="time"
android:ems="10"
android:id="@+id/time_view"
android:layout_weight="1" />
</LinearLayout>
mainActivity的佈局
<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:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/newNote"
android:id="@+id/newBtn"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/lv"
android:layout_below="@+id/newBtn"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
tools:listitem="@android:layout/simple_list_item_1"
android:divider="@android:drawable/divider_horizontal_textfield" />
</RelativeLayout>
新建佈局(AddActivity)
<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:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context="note.mynote.AddActivity">
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/title_ed"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:hint="@string/title_ed" />
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="textMultiLine"
android:ems="10"
android:id="@+id/content_ed"
android:hint="@string/content_ed"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/title_ed" />
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/saveBtn"
android:id="@+id/saveBtn"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
詳情頁(InActivity)
<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:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context="note.mynote.InActivity"
android:id="@+id/inContent">
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/title_ined"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:hint="@string/title_ed" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="time"
android:ems="10"
android:id="@+id/time_tvin"
android:layout_below="@+id/title_ined"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:visibility="invisible" />
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/content_ined"
android:layout_below="@+id/time_tvin"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:hint="@string/content_ed" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true">
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/upgradeBtn"
android:id="@+id/upgradeBtn"
android:layout_weight="1"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"/>
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/saveBtn"
android:id="@+id/save_inBtn"
android:layout_weight="1"
android:layout_alignParentBottom="true"
android:layout_alignRight="@+id/editText"
android:layout_alignEnd="@+id/editText" />
</LinearLayout>
</RelativeLayout>
好了,就這樣子,初學者哈,有什麼不足之處請各位多多原諒以及多多指教哈。