reol44 2021-12-25 15:23 采纳率: 40%
浏览 73
已结题

android底部导航栏,点击当前所在页面,出现数据无法显示道页面的情况

img

问题: 在进入界面的时候,界面能够接收成功的加载数据,切换界面也是第二个界面也是正常加载数据的,但是如果点击的导航栏是当前所在的界面,按道应该是刷新当前界面,但是刷新后数据却不能渲染到界面上面,测试的时候发现数据成功获取到了,但是就是不能加载

这个底部菜单栏是用android studio里面创建activity自动生成的 Bottom Navigation Activity

这个函数是用学号查询考试成绩,页面中用的

private void getGrade(String snumber){
        Gson gson = new Gson();
        JsonObject query = new JsonObject();
        query.addProperty("snumber",snumber);
        Call task = req.post("/grade_vue/selectrsubject", gson.toJson(query));
        task.enqueue(new Callback() {
            @Override
            public void onFailure(@NonNull Call call, @NonNull IOException e) {

            }
            @Override
            public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
                if (response.isSuccessful()) {
                    Type gradeListType = new TypeToken<ArrayList<HashMap<String,Object>>>(){}.getType();
                    ArrayList<HashMap<String,Object>> back = gson.fromJson(response.body().string(),gradeListType);
                    arr.clear();
                    arr.addAll(back);
                    Message msg = new Message();
                    msg.what = Request.MSG_GRADE_INFO;
                    mHandler.sendMessage(msg);
                }
            }
        });
    }

这个是页得到消息后刷新adapt的

    private Handler mHandler = new Handler(Looper.getMainLooper()){
        @Override
        public void handleMessage(@NonNull Message msg) {
            if(msg.what == Request.MSG_GRADE_INFO){
                adapter.notifyDataSetChanged();
            }
        }
    };
  • 写回答

1条回答 默认 最新

  • reol44 2021-12-25 20:29
    关注

    已经解决了,我本来的代码是在onActivityCreate里面调用bindelement函数为上面定义的组件findViewById,没想到这个居然让我不能显示界面
    具体原因是因为在第二次加载的时候,Handler里面的list貌似还是上一次的list没有刷新,导致我设定的值不是新界面里面组件的值

     @Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            LOGIN = getActivity().getSharedPreferences("user", Context.MODE_PRIVATE);
            req = new Req(getResources().getString(R.string.baseUrl));
            bindElement(); // 绑定组件
            arr = new ArrayList<>();
            adapter = new SimpleAdapter(getActivity(),arr,R.layout.grade_one_row,new String[]{"cnumber","cname","rscore","point","session"},new int[]{R.id.cnumber,R.id.cname,R.id.rscore,R.id.point,R.id.session});
            grade_list.setAdapter(adapter);
            getGrade(LOGIN.getString("logined",""));
        }
    

    解决方法也很简单,在handle里面重新findviewbyid还有设置adapt

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 1月2日
  • 修改了问题 12月25日
  • 创建了问题 12月25日

悬赏问题

  • ¥15 黄永刚的晶体塑性子程序中输入的材料参数里的晶体取向参数是什么形式的?
  • ¥20 数学建模来解决我这个问题
  • ¥15 计算机网络ip分片偏移量计算头部是-20还是-40呀
  • ¥15 stc15f2k60s2单片机关于流水灯,时钟,定时器,矩阵键盘等方面的综合问题
  • ¥15 YOLOv8已有一个初步的检测模型,想利用这个模型对新的图片进行自动标注,生成labellmg可以识别的数据,再手动修改。如何操作?
  • ¥30 NIRfast软件使用指导
  • ¥20 matlab仿真问题,求功率谱密度
  • ¥15 求micropython modbus-RTU 从机的代码或库?
  • ¥15 django5安装失败
  • ¥15 Java与Hbase相关问题