3

FragmentStatePagedAdapterでタブを使用しています。以下のコードはonOptionsItemSelected(MenuItem item)メソッドからのものです:

case R.id.menu_help:
  System.out.println("Pressin' da help button!");
  FragmentManager mananger = getSupportFragmentManager();
  android.support.v4.app.FragmentTransaction trans = mananger.beginTransaction();
  trans.replace(android.R.id.content, new HelpFragment());
  trans.addToBackStack(null);
  trans.commit();
  break;

android.R.id.contentただし、アクションバーの下のビューのみを置き換えます(そしてタブフラグメントの上にオーバーレイします)。そのための新しいアクティビティを作成せずに、画面全体をフラグメントに置き換える簡単な方法はありますか(そのための他のシステムリソースがあるべきではありませんか?)?それとも、新しい活動の方が実際に優れているでしょうか?

助けてくれてありがとう

コンテナレイアウト(MainActivityからの起動時に開始):

<android.support.v4.view.ViewPager
    android:id="@+id/masterViewPager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

そして、これはHelpFragmentのクラスだと思います。

public class HelpFragment extends Fragment {

  private View view;

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle states) {
    view = inflater.inflate(R.layout.layout_help_screen, container, false);

    return view;
  }

}

そしてフラグメントXML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/nothing" />

</LinearLayout>
4

1 に答える 1

0

更新: appcompat-v7 をリビジョン 19.0.0 に更新すると、以下のスイッチは不要になります。またはそれ以降。詳細については、 59077 を発行してください。


Android 4.x (Ice Cream Sandwich、API レベル 14)より前のバージョンを実行しているデバイス/エミュレーターを使用していると思われます。fragment transaction を使用すると、同様のオーバーレイの問題が発生しました。レイアウトの問題は、コンテンツ ビューが Android 4.x と比較して Android 2.x と 3.x で異なる方法で参照されるために発生します。コードを次から変更してみてください。

trans.replace(android.R.id.content, new HelpFragment());

に:

trans.replace(getContentViewCompat(), new HelpFragment());

...

public static int getContentViewCompat() {
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH ?
               android.R.id.content : R.id.action_bar_activity_content;
}

詳細な背景情報については、Shellum の投稿を参照してください。

于 2013-10-15T08:40:09.040 に答える