根据布尔条件

时间:2016-03-07 05:19:15

标签: java android

我有一个收藏夹功能,用户可以在其中添加喜爱的食谱,然后将其删除。我在操作栏上有一个菜单项,可以执行这两个操作。我有两个不同的菜单。当显示配方页面的片段时,将执行检查以查看配方是否已经为用户所青睐。如果它已被优惠,则应显示“删除”图标,但如果没有,则应显示“添加到收藏夹”图标。

但是,当我测试加载一个受欢迎的食谱页面时,“添加到收藏夹”按钮显示如下:

enter image description here

但是当我切换到另一个标签然后切换回来时,会显示正确的删除图标。

enter image description here

为什么第一次尝试时没有显示正确的菜单?

IngredientsFragment.java

 boolean exists;

  @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    menu.clear();
    super.onCreateOptionsMenu(menu, inflater);
    session = new SessionManager(getActivity());
    new CheckFavourite().execute();
    getExistence();

    if (session.isLoggedIn()) {

        if (exists){
            inflater.inflate(R.menu.delete_from_favs, menu);
        }

        else  {
            inflater.inflate(R.menu.add_to_favs, menu);

        }

    }
    restoreActionBar();

}

class CheckFavourite extends AsyncTask<String, String, String> {

    private String user_id, recipe_id;

    /**
     * Before starting background thread Show Progress Dialog
     * */
    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        user_id = session.getID();
        recipe_id = result.getRecipeId();

        System.out.println("User ID: " + user_id);
        System.out.println("recipe ID: " + recipe_id);
    }

    /**
     * Checking favourites
     * */
    protected String doInBackground(String... args) {

        // Building Parameters
        HashMap<String, String> params = new HashMap<>();
        params.put("user_id", user_id);
        params.put("recipe_id", recipe_id);


        // getting JSON Object
        JSONObject json = jsonParser.makeHttpRequest("MyWebsiteURL",
                "POST", params);

        // check log cat for JSON response
        Log.d("Create Response", json.toString());

        // check for success tag
        try {
            int success = json.getInt(TAG_SUCCESS);

            System.out.println(success);

            if (success == 1) {
                setTrue();
                Log.d("Exist", json.toString());

            } else {
                setFalse();
                Log.d("Does not exist", json.toString());

            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;
    }

    /**
     * After completing background task Dismiss the progress dialog
     * **/
    protected void onPostExecute(String file_url) {
        // dismiss the dialog once done


    }

}

public boolean getExistence(){
    return this.exists;
}

public void setTrue(){
    exists = true;
}

public void setFalse(){
    exists = false;
}

add_to_favs.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item android:id="@+id/favourites"
    android:title="@string/action_example"
    android:icon="@drawable/favourites"
    app:showAsAction="withText|ifRoom">
    </item>
</menu>

delete_from_favs.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item android:id="@+id/delete"
    android:title="@string/action_example"
    android:icon="@drawable/delete"
    app:showAsAction="withText|ifRoom">
</item>

</menu>

我尝试了很多东西,将两个菜单项放在同一个菜单中,并将其中一个设置为可见/不可见。我也尝试使用onPrepareOptionsMenu方法,但这导致了相同的结果。我知道我错过了一些愚蠢的东西。请帮忙!

1 个答案:

答案 0 :(得分:0)

只需使用一个菜单并在其中包含两个项目....并以编程方式隐藏/显示它..

menu.xml(在您的活动中)

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item android:id="@+id/favourites"
    android:title="@string/action_example"
    android:icon="@drawable/favourites"
    app:showAsAction="withText|ifRoom">
    </item>

<item android:id="@+id/delete"
    android:title="@string/action_example"
    android:icon="@drawable/delete"
    app:showAsAction="withText|ifRoom">
</item>
</menu>

创建视图内部

 @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
 MenuItem fav = menu.findItem(R.id.favourites);
 fav.setVisible(true);

MenuItem del = menu.findItem(R.id.delete);
 del.setVisible(true);
}

//based on condition
 if (session.isLoggedIn()) {

        if (exists){
           del.setVisibility(true);
           fav.setVisibility(false);
        }else{
          fav.setVisibility(true);
          del.setVisibility(false);
      }
}
}