Android Note项目

前面我们提到了Android sqlite的一个工具类,这次呢,我们利用这个工具类写个Note项目

      好了,先上图



那么主要实现的功能有,分页查询,添加Note,修改Note,删除Note。

      先从分页查询开始讲起,代码如下:

public class MainActivity extends AppCompatActivity implements MainAdapter.OnItemClickListener{

    public final static String TAG = "MainActivity";

    public final static int REQUEST_ADD_OK = 1;

    public final static int REQUEST_MODIFY_OK = 2;

    private Toolbar mToolbar;

    private RecyclerView mRecyclerView;

    private MainAdapter adapter;

    private List<Note> listDatas;

    private DatabaseAdapter dbAdapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ButterKnife.bind(this);

        mRecyclerView = ButterKnife.findById(this, R.id.recycler_view);
        dbAdapter = new DatabaseAdapter(this);
        listDatas = new ArrayList<Note>();
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
        mRecyclerView.setLayoutManager(linearLayoutManager);
        adapter = new MainAdapter(listDatas);
        adapter.setOnItemClickListener(this);
        mRecyclerView.setAdapter(adapter);

        setupToolbar();
//        setupDatas();
        initDatas();


    }

    /**
     * 设置toolbar
     */
    private void setupToolbar() {
        mToolbar = ButterKnife.findById(this, R.id.toolbar);
        setSupportActionBar(mToolbar);
    }

    /**
     * 添加测试数据
     */
    private void setupDatas() {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date curDate = new Date(System.currentTimeMillis());//获取当前时间
        String createDate = format.format(curDate);
        String updateDate = createDate;
        String title = "Believe";
        String content = "Believe in yourself.";
        Note note = new Note(title, content, createDate, updateDate);
        dbAdapter.create(note);
    }

    /**
     * 初始化数据
     */
    private void initDatas() {
        listDatas.clear();
        ArrayList<Note> list = dbAdapter.findLimit(15, 0);
        if (list.size() > 0) {
            for (Note note : list) {
                listDatas.add(note);
//                Log.d(TAG, note.toString());
            }
            adapter.notifyDataSetChanged();
        }
    }

    @Override
    public void onItemClick(View view, int position) {
        Note note = listDatas.get(position);
        Intent intent = new Intent(this, ModifyNoteActivity.class);
        intent.putExtra("id", note.getId());
        intent.putExtra("title", note.getTitle());
        intent.putExtra("content", note.getContent());
        startActivityForResult(intent, REQUEST_MODIFY_OK);
    }

    /**
     * 为添加按钮添加点击事件
     */
    @OnClick (R.id.btn_add) void add() {
        Intent intent = new Intent(this, AddNoteActivity.class);
        startActivityForResult(intent, REQUEST_ADD_OK);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_ADD_OK && resultCode == REQUEST_ADD_OK) {
            initDatas();
        }
        if (requestCode == REQUEST_MODIFY_OK && resultCode == REQUEST_MODIFY_OK) {
            initDatas();
        }
    }
}
主界面布局代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <include layout="@layout/toolbar_layout"/>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <android.support.v7.widget.RecyclerView
            android:id="@+id/recycler_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <android.support.design.widget.FloatingActionButton
            android:id="@+id/btn_add"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/add_note"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:layout_margin="20dp"
            app:backgroundTint="@color/colorPrimary"
            app:rippleColor="@color/colorPrimaryDark"/>
    </RelativeLayout>

</LinearLayout>

以上代码的列表主要使用RecyclerView来实现,毕竟是Google的新东西,也是Google推荐使用的,所有就多拿来用用。同时还用到个开源的ButterKnife 框架,主要是用来代替findById功能的,感兴趣的可以去github上看看,点击打开链接


接下来实现的是增,也就是添加Note,代码如下:

public class AddNoteActivity extends AppCompatActivity {

    public final static String TAG = "AddNoteActivity";

    public final static int RESULT_ADD_OK = 1;

    private Toolbar mToolbar;

    @Bind(R.id.et_title)
    EditText etTitle;

    @Bind(R.id.et_content)
    EditText etContent;

    private DatabaseAdapter dbAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_note);

        ButterKnife.bind(this);

        setupToolbar();
    }

    /**
     * 设置toolbar
     */
    private void setupToolbar() {
        mToolbar = ButterKnife.findById(this, R.id.toolbar);
        mToolbar.setTitle("");
        setSupportActionBar(mToolbar);
        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == android.R.id.home) {
            finish();
        }

        return super.onOptionsItemSelected(item);
    }


    @OnClick(R.id.btn_save) void save() {
        dbAdapter = new DatabaseAdapter(this);

        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date curDate = new Date(System.currentTimeMillis());//获取当前时间
        String createDate = format.format(curDate);
        String updateDate = createDate;
        String title = etTitle.getText().toString();
        String content = etContent.getText().toString();
        Note note = new Note(title, content, createDate, updateDate);

        dbAdapter.create(note);

        setResult(RESULT_ADD_OK);
        finish();
    }

布局代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@color/white">

    <include layout="@layout/toolbar_layout"/>

    <EditText
        android:id="@+id/et_title"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:hint="标题"
        android:textColor="@color/edit_text"
        android:background="@null"
        android:singleLine="true"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:gravity="center_vertical"/>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/divider"/>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <EditText
            android:id="@+id/et_content"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:hint="内容"
            android:textColor="@color/edit_text"
            android:background="@null"
            android:gravity="top"
            android:padding="10dp"/>

        <android.support.design.widget.FloatingActionButton
            android:id="@+id/btn_save"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/save"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:layout_margin="20dp"
            app:backgroundTint="@color/colorPrimary"
            app:rippleColor="@color/colorPrimaryDark"/>
    </RelativeLayout>

</LinearLayout>

这部分类容比较简单,涉及的主要是UI的布局


接下来的改和删,代码如下:

public class ModifyNoteActivity extends AppCompatActivity {

    public final static String TAG = "ModifyNoteActivity";

    public final static int RESULT_MODIFY_OK = 2;

    private Toolbar mToolbar;

    @Bind(R.id.et_title)
    EditText etTitle;

    @Bind(R.id.et_content)
    EditText etContent;

    private DatabaseAdapter dbAdapter;

    //id
    private int id;

    //要修改的title
    private String title;

    //要修改的内容
    private String content;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_modify_note);

        ButterKnife.bind(this);

        dbAdapter = new DatabaseAdapter(this);

        initDatas();
        setupToolbar();
    }


    /**
     * 初始化数据
     */
    private void initDatas() {
        id = getIntent().getIntExtra("id", 1);
        title = getIntent().getStringExtra("title");
        content = getIntent().getStringExtra("content");

        etTitle.setText(title);
        etTitle.setSelection(title.length());
        etContent.setText(content);
    }

    /**
     * 设置toolbar
     */
    private void setupToolbar() {
        mToolbar = ButterKnife.findById(this, R.id.toolbar);
        mToolbar.setTitle("");
        setSupportActionBar(mToolbar);
        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_modify_note, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int _id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (_id == android.R.id.home) {
            finish();
        }

        if (_id == R.id.action_delete) {
            dbAdapter.remove(id);
            setResult(RESULT_MODIFY_OK);
            finish();
        }

        return super.onOptionsItemSelected(item);
    }

    @OnClick(R.id.btn_modify) void modify() {

        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date curDate = new Date(System.currentTimeMillis());//获取当前时间
        String updateDate = format.format(curDate);
        String title = etTitle.getText().toString();
        String content = etContent.getText().toString();
        Note note = new Note(id, title, content, updateDate);

        dbAdapter.update(note);

        setResult(RESULT_MODIFY_OK);
        finish();
    }
}

布局代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@color/white">

    <include layout="@layout/toolbar_layout"/>

    <EditText
        android:id="@+id/et_title"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:hint="标题"
        android:textColor="@color/edit_text"
        android:background="@null"
        android:singleLine="true"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:gravity="center_vertical"/>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/divider"/>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <EditText
            android:id="@+id/et_content"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:hint="内容"
            android:textColor="@color/edit_text"
            android:background="@null"
            android:gravity="top"
            android:padding="10dp"/>

        <android.support.design.widget.FloatingActionButton
            android:id="@+id/btn_modify"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/save"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:layout_margin="20dp"
            app:backgroundTint="@color/colorPrimary"
            app:rippleColor="@color/colorPrimaryDark"/>
    </RelativeLayout>

</LinearLayout>

好了,通过以上三个步骤我们就可以实现一个基于sqlite的Note项目,代码比较简单,有什么不懂得地方可以随时留言。项目源码链接: http://pan.baidu.com/s/1bn7HJ23 密码: f2eu




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值