安卓练习----有关Sqlite+RecyclerView+Dialog对数据进行增删改查的实现细节

效果图

在这里插入图片描述

说明

此篇是我上一篇博文的一些实现细节,如需代码,请移步至此链接

具体内容
1.dialog返回数据

由于dialog与主UI的更新是异步的,要想实现通过dialog返回数据,就必须写一个接口DialogListener,用接口回调的方式返回数据
具体实现是:
1.写一个DialogListener接口,里面有一个sendMessage()方法

public interface DialogListener {
    void sendMessage();
}

2.在自定义对话框中添加一个DialogListener接口类型的属性,接收来自构造方法传入的DialogListener对象,并在需要执行sendMessage()方法的地方,执行方法。

/**
省略非关键代码
*/
public class AddDialog extends Dialog {
    
    private DialogListener mListener;

    public AddDialog(@NonNull Context context, DialogListener listener) {
        super(context);
        this.mListener = listener;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
       
        mButtonAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //需要使用方法的时候
                mListener.sendMessage();
            }
        });
    }
}

3.在主UI中重写接口,并传入dialog的构造方法中

/**
省略非关键代码
*/
public class MainActivity extends AppCompatActivity{
   
    private DialogListener mListener = new DialogListener() {
        @Override
        public void sendMessage() {
            mAdapter.updateView();//点击确定后更新ui
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       

        mButtonAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            //传入mListener参数
                new AddDialog(MainActivity.this,mListener).show();
            }
        });  
    } 
}
2 UserDao对象

我遵循了《android编程权威指南3》一书中的写法,具体就是用一个静态变量保存UserDao对象,然后通过一个静态方法获取。这样保证每一次都是相同的UserDao对象。

public class UserDao implements IUserDao{
    private static UserDao sUserDao;

    private Context mContext;
    private SQLiteDatabase mDatabase;

    public UserDao(Context context) {
        mContext = context.getApplicationContext();
        mDatabase = new UserSqlHelper(mContext).getWritableDatabase();//此时数据库才是可写的
    }

    /**
     * 全局保留一个userDao实例
     * */
    public static UserDao getUserDao(Context context){
        if (sUserDao == null){
            sUserDao = new UserDao(context);
        }
        return sUserDao;
    }
}
3 数据表的定义

在UserDbSchema这个类中,使用内部类嵌套的方式,保存定义数据库表,列的关系,这样即使在很多很多表的项目中,依旧有迹可循,不会为了繁杂的表,列名字而头疼。

public class UserDbSchema {
    //利用内部类定义user表结构
    public static final class UserTable{
        //定义表名
        public static final String TABLE_NAME = "user";

        //定义数据表字段
        public static final class Columns{
            public static final String UUID = "uuid";
            public static final String NAME = "name";
            public static final String PHONE = "phone";
            public static final String ADDRESS = "address";
            public static final String SEX = "sex";
        }
    }
}
4.更新ui界面

可以看到,我每次更新ui都是获取所有用户信息,虽然这样会降低性能,但是在这个小应用中,问题不大,这样写,不管是增删改,都可以公用一个更新ui方法,简化代码。但是,遇到数据繁多的时候,还应当改进,尤其是在改这一方面,可以根据指定uuid进行定点更新,不过这都是后话了。

 public void updateView(){
        mUsers =  UserDao.getUserDao(mContext).getAllUser();
        notifyDataSetChanged();
    }

我能想到的就以上四点,如果有问题可以评论或私信联系我,我会再补充解释。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大青儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值