簡單的記事本(SQLite+自定義adapter)

初學者學習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>

好了,就這樣子,初學者哈,有什麼不足之處請各位多多原諒以及多多指教哈。

發佈了30 篇原創文章 · 獲贊 39 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章