Android -Sqlite记事本小案例-笔记列表ListView、单击查看、长按删除

列表页分为两个部位 一个就是ListView布局

然后还需要重新创建一个布局文件 item

会把item填充进去 自定义布局这种

 

<ListView
    android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
</ListView>

主页 上篇文章已经写了

我们在这篇需要加上一个自定义item

activity_show.xml 我们会在适配器中用到 我这里用到的是自定义适配器

<?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="wrap_content">

    <TextView
        android:id="@+id/list_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:text="title"/>
    <TextView
        android:id="@+id/list_time"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:text="20"/>
</LinearLayout>

 

 

这个是总的Java代码 ,我们等下 一一拆分

package top.com.text.ui;

import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

import top.com.text.R;
import top.com.text.entity.Article;
import top.com.text.utils.DB;
import top.com.text.utils.L;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {


    private Button bt_add;

    private DB db;
    public List<Article> list;




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

        db=new DB(this,"article.db",null,1);

        final SQLiteDatabase sqlDB=db.getWritableDatabase();
//        Cursor cursor = sqlDB.query("article",null,null, null,null, null,null);

        list=new ArrayList<Article>();


        //查询所有笔记,并将笔记展示出来
        Cursor cursor=sqlDB.rawQuery("select * from article",null);
        while(cursor.moveToNext()){

            int id = cursor.getInt(cursor.getColumnIndex("id"));
            String title = cursor.getString(cursor.getColumnIndex("title"));
            String auth = cursor.getString(cursor.getColumnIndex("auth"));
            String time = cursor.getString(cursor.getColumnIndex("time"));
            String content = cursor.getString(cursor.getColumnIndex("content"));

            Article article=new Article(id,title,auth,content,time);

            list.add(article);
        }

        //拿到listView对象
        final ListView listView=(ListView) findViewById(R.id.list);

        //设置适配器
        listView.setAdapter(new MyApter());


        //单击查询
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                Intent intent=new Intent(getApplicationContext(),ShowActivity.class);
                intent.putExtra("id",list.get(position).getId());
                startActivity(intent);
                MainActivity.this.finish();
            }
        });

        //长按删除
//        listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
//
//
//
//            @Override
//            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, final long id) {
//
//                //AlerDialog判断是否删除记事
//                new AlertDialog.Builder(MainActivity.this)
//                        .setTitle("提示框")
//                        .setMessage("确认删除该笔记??")
//                        .setPositiveButton("确定",
//                                new DialogInterface.OnClickListener() {
//                                    @Override
//                                    public void onClick(DialogInterface arg0,int arg1) {
//
//                                        SQLiteDatabase sqlDB=db.getWritableDatabase();
//                                        sqlDB.delete("article","id="+id,null);
//                                        //删除后刷新列表
//                                        MainActivity.this.onResume();
//                                        Toast.makeText(
//                                                MainActivity.this,
//                                                "删除成功!!",
//                                                Toast.LENGTH_LONG)
//                                                .show();
//                                    }
//                                }).setNegativeButton("取消", null).show();
//                return true;
//            }
//        });



//
//        SQLiteDatabase sqlDB=db.getWritableDatabase();
//        sqlDB.delete("article","id="+id,null);



        initView();
    }



    private void initView() {

         bt_add=(Button) findViewById(R.id.bt_add);
         bt_add.setOnClickListener(this);

    }



    //适配器类
    class MyApter extends BaseAdapter{

        //获取集合中有多少条元素,由系统调用
        @Override
        public int getCount() {
            return list.size();
        }

        @Override
        public Object getItem(int position) {
            return list.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {

            final Article article=list.get(position);

            View v=null;

            //判断缓存是否为空
            if(convertView == null){
                v=View.inflate(MainActivity.this,R.layout.item,null);
            }else{
                v=convertView;
            }

            TextView list_title=(TextView) v.findViewById(R.id.list_title);
            TextView list_time=(TextView) v.findViewById(R.id.list_time);


            list_title.setText(article.getTitle());
            list_title.setOnClickListener(new View.OnClickListener(){

                @Override
                public void onClick(View v) {
                    Article article1=(Article) getItem(position);
                    Log.i("Id:",article.getId()+" ");
                    Intent intent=new Intent(getApplicationContext(),ShowActivity.class);
                    intent.putExtra("article",article);
                    startActivity(intent);
                }
            });



            list_time.setText(article.getTime());
            list_time.setOnClickListener(new View.OnClickListener(){

                @Override
                public void onClick(View v) {
                    Article article1=(Article) getItem(position);
                    Log.i("Id:",article.getId()+" ");
                    Intent intent=new Intent(getApplicationContext(),ShowActivity.class);
                    intent.putExtra("article",article);
                    startActivity(intent);
                }
            });

            list_time.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    Article article1= (Article) getItem(position);
                    LongClick(MainActivity.this,article.getId());
                    return false;
                }
            });
            return v;
        }
    }

    private void LongClick(final Context mContext,final int id){
        final AlertDialog.Builder normalDialog =
                new AlertDialog.Builder(mContext);
        //normalDialog.setIcon(R.drawable.icon_dialog);
        normalDialog.setTitle("请注意:");
        normalDialog.setMessage("你确定要删除这个日志吗?");
        normalDialog.setPositiveButton("确定",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        db=new DB(mContext,"article.db",null,1);
                        SQLiteDatabase sqlDB=db.getWritableDatabase();
                        sqlDB.delete("article","id="+id,null);
                    }
                });
        normalDialog.setNegativeButton("关闭",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //...To-do
                    }
                });
        // 显示
        normalDialog.show();
    }

    @Override
    public void onClick(View v) {


        startActivity(new Intent(this,EditActivity.class));
    }



}

 

列表显示数据

肯定首先连接数据库

然后需要一个list存放数据

我们在使用Cursor 进行存放 一直循环出来 cursor.moveToNext() 往list添加数据

然后使用findById 拿到List对象

给listView设置适配器

listView.setAdapter(new MyApter());

 

db=new DB(this,"article.db",null,1);

        final SQLiteDatabase sqlDB=db.getWritableDatabase();
//        Cursor cursor = sqlDB.query("article",null,null, null,null, null,null);

        list=new ArrayList<Article>();


        //查询所有笔记,并将笔记展示出来
        Cursor cursor=sqlDB.rawQuery("select * from article",null);
        while(cursor.moveToNext()){

            int id = cursor.getInt(cursor.getColumnIndex("id"));
            String title = cursor.getString(cursor.getColumnIndex("title"));
            String auth = cursor.getString(cursor.getColumnIndex("auth"));
            String time = cursor.getString(cursor.getColumnIndex("time"));
            String content = cursor.getString(cursor.getColumnIndex("content"));

            Article article=new Article(id,title,auth,content,time);

            list.add(article);
        }

        //拿到listView对象
        final ListView listView=(ListView) findViewById(R.id.list);

        //设置适配器
        listView.setAdapter(new MyApter());

 

适配器

继承BaseAdapter

获取元素大小 这些需要自己改一下

判断是否第一次缓存 也就是第一次打开

然后把item自定义布局文件 加载到ListView布局中

然后获取item 的那个item的textView id的对象

然后在把list的数据 添加到item上 就可以了


    //适配器类
    class MyApter extends BaseAdapter{

        //获取集合中有多少条元素,由系统调用
        @Override
        public int getCount() {
            return list.size();
        }

        @Override
        public Object getItem(int position) {
            return list.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {

            final Article article=list.get(position);

            View v=null;

            //判断缓存是否为空
            if(convertView == null){
                v=View.inflate(MainActivity.this,R.layout.item,null);
            }else{
                v=convertView;
            }

            TextView list_title=(TextView) v.findViewById(R.id.list_title);
            TextView list_time=(TextView) v.findViewById(R.id.list_time);


            list_title.setText(article.getTitle());
          
            list_time.setText(article.getTime());
       
            return v;
        }
    }

 

单击查看详细

可以使用两种方法 第一种是 在适配器 getVIew 里面获取数据 然后把数据传到另一个页面

 

另一个使用单击事件 获取id 然后 intent在传递id过去 然后又根据id查询

        //单击查询
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                Intent intent=new Intent(getApplicationContext(),ShowActivity.class);
                intent.putExtra("id",list.get(position).getId());
                startActivity(intent);
                MainActivity.this.finish();
            }
        });

另一个页面的代码

这里用了两个方法 第一个传递id 然后接受 没有写SQL语句 我实现的是直接传递数据对象

package top.com.text.ui;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.TextView;

import top.com.text.R;
import top.com.text.entity.Article;
import top.com.text.utils.L;

public class ShowActivity extends AppCompatActivity {

    int id;

    private TextView et_title;

    private TextView et_auth;

    private TextView et_content;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show);

//        Intent intent=this.getIntent();
//        id=intent.getIntExtra("id",0);

        Log.i("id:", String.valueOf(id));
        Intent intent=getIntent();
        Article article=(Article) intent.getSerializableExtra("article");

        Log.i("Id","id:"+article.getId());

        Log.i("Name:",article.getAuth());


        init();

        et_title.setText(article.getTitle());
        et_auth.setText(article.getAuth());
        et_content.setText(article.getContent());

    }

    private void init() {
        et_title=(TextView) findViewById(R.id.et_title1);
        et_auth=(TextView) findViewById(R.id.et_auth1);
        et_content=(TextView) findViewById(R.id.et_content1);
    }
}

 

另一个方式

直接在getVIew中 把参数对象传递过去

            list_title.setText(article.getTitle());
            list_title.setOnClickListener(new View.OnClickListener(){

                @Override
                public void onClick(View v) {
                    Article article1=(Article) getItem(position);
                    Log.i("Id:",article.getId()+" ");
                    Intent intent=new Intent(getApplicationContext(),ShowActivity.class);
                    intent.putExtra("article",article);
                    startActivity(intent);
                }
            });



            list_time.setText(article.getTime());
            list_time.setOnClickListener(new View.OnClickListener(){

                @Override
                public void onClick(View v) {
                    Article article1=(Article) getItem(position);
                    Log.i("Id:",article.getId()+" ");
                    Intent intent=new Intent(getApplicationContext(),ShowActivity.class);
                    intent.putExtra("article",article);
                    startActivity(intent);
                }
            });

 

然后最后长按 一样的有两种 另一种 详细看代码

        list_time.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    Article article1= (Article) getItem(position);
//                    Intent intent = new Intent(getApplicationContext(),OpenLog.class);
//                    intent.putExtra("Log",log);
                    
                    LongClick(MainActivity.this,article.getId());
                    return false;
                }
            });

 

长按事件 然后删除数据 这里没有删除控件 重新打开就可以啦

db=new DB(mContext,"article.db",null,1);
SQLiteDatabase sqlDB=db.getWritableDatabase();
sqlDB.delete("article","id="+id,null);

private void LongClick(final Context mContext,final int id){
        final AlertDialog.Builder normalDialog =
                new AlertDialog.Builder(mContext);
        //normalDialog.setIcon(R.drawable.icon_dialog);
        normalDialog.setTitle("请注意:");
        normalDialog.setMessage("你确定要删除这个日志吗?");
        normalDialog.setPositiveButton("确定",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        db=new DB(mContext,"article.db",null,1);
                        SQLiteDatabase sqlDB=db.getWritableDatabase();
                        sqlDB.delete("article","id="+id,null);
                    }
                });
        normalDialog.setNegativeButton("关闭",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //...To-do
                    }
                });
        // 显示
        normalDialog.show();
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值