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

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 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀