不同Activity之间传递数据,并改变UI

在最近这个项目里面,遇到了一个小问题
需求是这样子的一个简单的设置手机号码
这里写图片描述
这里写图片描述

不过这里有一个问题是 在第二个页面点击提交,并不是向服务器传输数据,而是前一个页面变化,当第一个页面销毁的时候,向服务器传输全部数据(- -奇怪的理论) 后台的意思是我不管你这这个页面如何操作,改变都不需要告诉我,只有当这个页面离开的时候,把全部数据给我- -!
我当时那个内心彭拜啊,第一反应就是用数据库去做…可是,有感觉有点大题小用(这里题外话,数据库开源推荐GreenDao,简单易懂)

首先,说说我实现的思路
首先电话号码设置肯定是一个RecyclerView,一切依托于一个List<>
在第二个界面又分为两种情况,一个是点击已经存在的条目修改,第二是点击添加手机号码修改
整个需求则是修改数据,添加数据,删除数据- -这些都是可以通过List来操作,瞬间清晰明了有没有…..

这里面我使用了一个Tag来标识是从条目上跳到设置页面,还是从添加手机号跳到设置页面的

//这里不得不说一句,我使用的Adapter是叫BRVAH 的框架,国人写的,不得不说,简直强无敌!!!强推.....
//下面只贴出了点击跳转的逻辑
   phoneSetAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
                tag = position;
                Intent intent = new Intent(QuickSettingActivity.this, PhoneSetActivity.class);
                intent.putExtra(User.Tag, position);
                startActivity(intent);
            }
        });
//        获取到点击删除的Item  这里面是BRVAH adapter自带的方法,有没有很强!!!! 
        phoneSetAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
            @Override
            public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
                phoneSetAdapter.remove(position);
            }
        });

然后需要在手机设置页面进行数据的处理

//这是获取前一个页面的标识 ,判断是条目修改是添加
//标识 0-10 是条目  -1是添加
 position = getIntent().getExtras().get(User.Tag);
//处理的设置内容

SharedPreferenceUtil.putString(this, position.toString() + "PHONE", account1);
SharedPreferenceUtil.putString(this, position.toString() + "PHONENAME", name1);
//这是的是添加的  positon = -1 是添加  通过EventBus向前一个页面传输数据
EventBus.getDefault().postSticky(new MessagePhoneEvent(account1, name1));
            //这里还需要建一个表吗 一一对应
 MyToast.show(this, "设置成功");

**思路,我使用了SharePreference存储用户信息但是目前来说 似乎用不到

@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
    public void getPhoneMsg(MessagePhoneEvent message) {
        //从条目获取到的更新数据 tag >=0 代表是设置手机号码 并非支付宝
        if (tag >= 0) {
            dealWithItem();
        } else {
            //是添加
            // 
            QuickSettingPOJO.InfosBean infosBean = new QuickSettingPOJO.InfosBean();
            infosBean.setRegisterPhone(message.phone);
            infosBean.setRegisterRelname(message.phonename);
            /**
             * TODO 新加字段
             */
            quickSettingPOJOs.clear();
            quickSettingPOJOs.add(infosBean);
            if (quickSettingPOJOs != null) {
                phoneSetAdapter.addData(quickSettingPOJOs);
            }
            phoneSetAdapter.notifyDataSetChanged();
        }
    }
    /*
    *处理修改数据
    */

  private void dealWithItem() {
        String item_phone = SharedPreferenceUtil.getString(this, tag + "PHONE", "");
        String item_phonename = SharedPreferenceUtil.getString(this, tag + "PHONENAME", "");
        phoneSetAdapter.getItem(tag).setRegisterPhone(item_phone);
        phoneSetAdapter.getItem(tag).setRegisterRelname(item_phonename);
        phoneSetAdapter.notifyDataSetChanged();
    }

最后在销毁的时候上传全部数据

  @Override
    protected void onDestroy() {
        EventBus.getDefault().unregister(this);
        super.onDestroy();
        new Thread(new Runnable() {
            @Override
            public void run() {
                String trimalipay = alipay.getText().toString().trim();
                String trimalipayname = alipay_name.getText().toString().trim();
                if (trimalipay.equals("支付宝账号")) {
                    trimalipay = "";
                    trimalipayname = "";
                }
                if (phoneSetAdapter != null) {
                    quickSettingPOJOs.clear();
                    for (int i = 0; i < phoneSetAdapter.getItemCount(); i++) {
                        QuickSettingPOJO.InfosBean finishbean = new QuickSettingPOJO.InfosBean();
                        String registerPhone = phoneSetAdapter.getItem(i).getRegisterPhone();
                        String registerRelname = phoneSetAdapter.getItem(i).getRegisterRelname();
                        finishbean.setAlibabaPay(trimalipay);
                        finishbean.setAlibabaName(trimalipayname);
                        finishbean.setRegisterPhone(registerPhone);
                        finishbean.setRegisterRelname(registerRelname);

                        quickSettingPOJOs.add(finishbean);
                    }
                    if (phoneSetAdapter.getItemCount() == 0) {
                        QuickSettingPOJO.InfosBean finishbean = new QuickSettingPOJO.InfosBean();
                        finishbean.setAlibabaPay(trimalipay);
                        finishbean.setAlibabaName(trimalipayname);
                        finishbean.setRegisterPhone("");
                        finishbean.setRegisterRelname("");
                        quickSettingPOJOs.add(finishbean);
                    }
                    jsonString = CommenUtil.getJsonString(quickSettingPOJOs);

//        //在关闭页面的时候向服务器 传送数据
                    String url = Constant.GET_USERINFO_QUICKSETTING;
                    OkHttpUtils
                            .post()
                            .url(url)
                            .addParams("shortCutInfos", String.valueOf(jsonString))
                            .addParams("operateType", "3")
                            .build()
                            .execute(new MyStringCallback() {
                                @Override
                                public void onError(Call call, Exception e, int id) {
                                }

                                @Override
                                public void onResponse(String response, int id) {
                                    if (code == 200) {
                                        //通知
                                    } else if (code == 400) {
                                        Gson gson = new Gson();
                                        ErrorPOJO submitErrorPOJO = gson.fromJson(response, ErrorPOJO.class);
                                        MyToast.show(QuickSettingActivity.this, submitErrorPOJO.error.description);
                                    }
                                    handler.removeCallbacksAndMessages(null);
                                }
                            });
                }
            }
        }).start();
    }
}

现在再次梳理一下 逻辑
使用了 BRVAH 进行条目的删除
使用SharePreference 进行数据的存储
使用EventBus 进行数据的传输
使用 QuickSettingPOJO.InfosBean 进行数据的设置回显

核心逻辑点 视图样式的改变主要是基于 Adapter的改变,Adapter的改变是基于Bean数据的改变. 同时 数据可能会发生 增加,修改,删除
删除的处理直接通过Adapter 就可以实现,
增加和修改可以通过position进行判断 -1 为添加 其他数据为条目位置

最后 在上传数据的时候 需要重新 获取当面条目里面的所有数据

for (int i = 0; i < phoneSetAdapter.getItemCount(); i++) {
                        QuickSettingPOJO.InfosBean finishbean = new QuickSettingPOJO.InfosBean();
                        String registerPhone = phoneSetAdapter.getItem(i).getRegisterPhone();
                        String registerRelname = phoneSetAdapter.getItem(i).getRegisterRelname();
                        finishbean.setAlibabaPay(trimalipay);
                        finishbean.setAlibabaName(trimalipayname);
                        finishbean.setRegisterPhone(registerPhone);
                        finishbean.setRegisterRelname(registerRelname);

                        quickSettingPOJOs.add(finishbean);
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值