0

私が持っている質問は説明するのが少し難しいので、ご容赦ください。アプリにアクションバーを実装しました。アクションバーに5〜6個のメニュー項目があり、使用してクリックイベントを処理しています

onOptionsItemSelected(MenuItem item)

各メニュー項目をクリックすると、共通領域の特定のビューが膨張します[つまり、膨張したビューは共通のコンテナーではなく、互いに重なり合います]、そのビューを削除して、別のアイテムがクリックされた場合は別のビューを膨張させる必要があります。これを達成します単純な if 比較ステートメントを使用します。

ソリューションは単純ですが、実装して非常に多くの条件をチェックすると、複雑になり、コードが判読できなくなります。

この問題に対するより洗練された解決策が存在するかどうかを知りたいだけですか?

4

2 に答える 2

0

ここでは、この「共通領域」にフラグメントを使用していると仮定します。使用していない場合は、使用を開始する必要があります。そして、コードは非常に単純です (ps. 私はメモリから書いているので、私が持っているかもしれない小さな間違いを修正してください):

    onOptionsItemSelected(MenuItem item){
            switch(item.getItemId()){
                case R.id.menu_item_1:
                     // Instantiate the fragment for the item_1
                     Fragment frag = new ... etc.... etc
                     // note I'm using replace, so it will remove whatever was there before.
                    getFragmentManager.beginTransaction().replace(R.id.common_area, frag).commit();
                return true;
                case R.id.menu_item_2:  // repeat for all the menus

                default:
                return super.onOptionsItemSelected(item);
            }
    }
于 2012-10-15T12:37:01.790 に答える
0

最後に膨張したビューへの参照を保持します。

private View lastInflatedView;

メソッドでonOptionsItemSelected、この参照を使用してビューを非表示にし、次の膨張に設定します。

if (lastInflatedView != null) {
 lastInflatedView.setVisibility(View.GONE);
}

View newView = //inflate here
lastInflatedView = newView;
于 2012-10-15T12:34:15.557 に答える