让Android选项菜单等到从Web请求返回

时间:2016-02-07 00:37:30

标签: android json

我正在调用端点来引入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);

}

1 个答案:

答案 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,不要试图延迟创建动作栏项目,因为这样做不会很好。相反,根据需要使项目可见和不可见。

相关问题