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