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();
            }
        }
    };

已经解决了,我本来的代码是在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