40

私の Android アプリケーションは、SherlockFragmentActivity のサブクラスである BeginActivity を起動し、次を使用して最初のビューを表示します。

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (getSupportFragmentManager().findFragmentById(android.R.id.content) == null) {
            Fragment f = LoginFragment.newInstance();

            getSupportFragmentManager()
                    .beginTransaction()
                    .add(android.R.id.content, f, "loginfragment")
                    .attach(f)
                    .commit();
        }
}

LoginFragment は、次のようなビューを示します。

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.login, container, false);

        // Get pointers to text views
        usernameField = (EditText) v.findViewById(R.id.usernameLog);
        passwordField = (EditText) v.findViewById(R.id.passwordLog);
        progressBar = (ProgressBar) v.findViewById(R.id.progressBarLog);
        // Set button click listeners for both buttons
        Button b = (Button) v.findViewById(R.id.loginButton);
        b.setOnClickListener(this);

        return v;
    }

ログインをクリックすると、次のようなリスト ビューが表示されます。

BeginActivity top = (BeginActivity) getActivity();
Fragment f = OfferListFragment.newInstance();
        top.getSupportFragmentManager()
                .beginTransaction()
                .add(android.R.id.content, f, "offerList")
                .addToBackStack(f.getClass().getSimpleName())
                .commit();

最後に、OfferListFragment はそのビューを次のように表示します。

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.offers, container, false);

        return v;
    }

今私が抱えている問題は、最終的な OfferListFragment が透明に見え、その下にログイン画面が表示されることです。背景が黒い Theme.Sherlock を使用しています。ビューの背景も手動で黒に設定する必要がありますか? または、テーマの黒は、システム上のユーザーがカスタマイズできますか? (私は Android ユーザーではありません)。

ありがとう

4

5 に答える 5

85

私見私はこの答えに同意しません。

フラグメントを置き換えたり、追加したりすることができます。

たとえば、ネットワーク要求によって取得されたリストであるフラグメントにいるとしましょう。フラグメントをdetailFragmentに置き換えて、それをbackStackに追加するとします。

戻ると、フラグメントはネットワーククエリをやり直します。もちろん、キャッシュできますが、なぜですか? これは前の状態に戻るため、最後のフラグメントを追加すると、コードがまったくなくてもまったく同じ状態になります。

フラグメントは、画面のごく一部のみを描画するために使用できるため、デフォルトでは透明な背景になっていますが、フラグメントが match_parent の場合は、その背景を色に設定し、fragmentTransaction で add を使用し続けます。

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scrollView1"
android:background="@android:color/white"
android:layout_width="match_parent"
android:layout_height="wrap_content" >

これはフラグメント レイアウト XML のルート要素になり、線形などになる可能性があり、トランザクション コードは次のとおりです。

YourFragment detail = YourFragment.newInstance(Id);
ft.add(R.id.contentHolder, detail);
ft.addToBackStack(TAG);
ft.commit();

add を replace に変更せずに無地の背景を表示する方法を知りたい人に、これが役立つことを願っています。これは通常、最良のケースではありません。

よろしく

于 2014-02-17T17:50:16.033 に答える