我正在调用端点来引入JSON。我希望活动等待设置选项菜单,因为如果键值从Web服务返回true,我希望星形图标显示为满,反之亦然。 我已尝试使用onPrepareOptionsMenu()编程,但由于响应是在一个单独的线程上,因此它会加载切换图标的默认值。
指针会有所帮助!
@Override
public boolean onPrepareOptionsMenu(Menu menu){
if(isFavorite){
menu.removeItem(R.id.action_non_favorite);
menu.add(101, R.id.action_favorite, 0, "true");
}else{
menu.removeItem(R.id.action_favorite);
menu.add(101, R.id.action_non_favorite, 0, "false");
}
return super.onPrepareOptionsMenu(menu);
}
这是请求:
private void sendDetailRequest(String urlRequest, final Person contact) {
JsonObjectRequest objectRequest1 = new JsonObjectRequest(Request.Method.GET, urlRequest, null,new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
String jsonString = response.toString();
Gson gson = new GsonBuilder().create();
Person.PersonDetail personDetail = gson.fromJson(jsonString, Person.PersonDetail.class);
contact.setContactDetails(personDetail);
isFavorite = personDetail.favorite;
//prepareOptionsMenu(R.menu.menu_main);
buildPage(contact);
}
}, new Response.ErrorListener(){
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(contactDetails.this, error.getMessage(), Toast.LENGTH_LONG).show();
}
});
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(objectRequest1);
}
答案 0 :(得分:2)
如果键值从Web服务返回true,我希望星形图标显示为满,反之亦然
步骤1:正常创建菜单。但是,明星的android:visible="false"
上有<item>
。
步骤2:在onCreateOptionsMenu()
中,在使用MenuInflater
对菜单进行充气call findItem()
on the Menu
后,传递明星项目的ID。在活动或片段的字段中保留MenuItem
。
步骤3:当您的Web服务调用完成后,如果需要,请返回主应用程序线程call setVisible(true)
on the MenuItem
,以使该星形对用户可见。
IOW,不要试图延迟创建动作栏项目,因为这样做不会很好。相反,根据需要使项目可见和不可见。