3

Bluetooth 関連のアプリ (とminSdkVersion="18") には、次の 3 つの UI フラグメントのいずれかを表示する単一のMainActivity.javaがあります。

  • MainFragment.java (トップ画面)
  • SettingsFragment.java (設定画面、メニューから入力)
  • ScanningFragment.java (近くの Bluetooth デバイスを一覧表示)

スクリーンショット

「上へ」ボタンを表示し、「戻るボタン」を処理するには、次のコードを配置します。

public class MainActivity extends Activity 
                          implements BleWrapperUiCallbacks {

    // set in onResume() of each fragment
    private Fragment mActiveFragment = null;

´   @Override
    public void onBackPressed() {
        if (!getFragmentManager().popBackStackImmediate())
            super.onBackPressed();
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_ACTION_BAR);
        setContentView(R.layout.activity_root);
        getActionBar().setDisplayHomeAsUpEnabled(true);

        if (savedInstanceState == null) {
            Fragment fragment = new MainFragment();
            getFragmentManager().beginTransaction()
                .replace(R.id.root, fragment, "main")
                .commit();
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                getFragmentManager().popBackStackImmediate();
                break;

            case R.id.action_settings:
                Fragment fragment = new SettingsFragment();
                getFragmentManager().beginTransaction()
                    .addToBackStack(null)
                    .replace(R.id.root, fragment, "settings")
                    .commit();
                break;
        }

        return super.onOptionsItemSelected(item);
    }

これはうまく機能しますが、上記のスクリーンショットの左側に見られるように、 MainFragment.javaが表示されているときに「上へ」ボタンがまだ表示されているという表面的な問題があります。

電話してみた

getActionBar().setHomeButtonEnabled(false);

そのフラグメントがアクティブになっているとき、しかしそれは「アップボタン」を無効にするだけです-実際に非表示にすることはありません。

4

3 に答える 3

6

Little Child (ありがとう!) の助けを借りて、ここでFragmentManager.OnBackStackChangedListenerを使用した私のソリューション:

public class MainActivity extends Activity 
                          implements OnBackStackChangedListener,
                                    BleWrapperUiCallbacks {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        ...
        getFragmentManager().addOnBackStackChangedListener(this);
    }

    @Override
    public void onBackStackChanged() {
        getActionBar().setDisplayHomeAsUpEnabled(
            getFragmentManager().getBackStackEntryCount() > 0);
    }
于 2015-03-17T13:57:17.900 に答える
3

APIレベル18にはこれがあるので、あなたは幸運です:

getActionBar().setHomeAsUpIndicator(R.drawable.ic_yourindicator);  

サポート ライブラリの場合は次のとおりです。

getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_yourindicator);  

そのため、現在のフラグメントに応じて、「上」ボタンのアイコンを変更できます。

また、これを試してください:

getActionBar().setDisplayHomeAsUpEnabled(false);

ホームを「上」アフォーダンスとして表示するかどうかを設定します。

于 2015-03-17T13:13:14.623 に答える