我正在调用一个端点来提取 JSON。我希望 Activity 等待设置选项菜单,因为如果键值从 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);
}
最佳答案
I want a star icon to appear full if a key-value returns true from the web service and vice versa
第 1 步:正常创建菜单。但是,有android:visible="false"
在 <item>
上对于明星。
第 2 步:在 onCreateOptionsMenu()
中, 在使用 MenuInflater
之后膨胀菜单,call findItem()
on the Menu
, 传入你的 star item 的 ID。捕获那个MenuItem
在您的 Activity 或 fragment 的某个领域。
第 3 步:当您的 Web 服务调用完成时,返回主应用程序线程,如果需要,call setVisible(true)
on the MenuItem
, 让星标对用户可见。
IOW,不要试图延迟操作栏项目的创建,因为那样不会很好。相反,根据需要使项目可见和不可见。
关于android - 让 Android 选项菜单等到从 Web 请求返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35248367/