Подтвердить что ты не робот

Фрагмент прозрачен и показывает активность ниже

Приложение для Android запускается в BeginActivity, которое является подклассом SherlockFragmentActivity и показывает его первый вид, используя:

@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).

Спасибо

4b9b3361

Ответ 1

Попробуйте использовать FragmentTransaction class to replace фрагменты вместо добавления.

Объяснение:

Каждая транзакция представляет собой набор изменений, которые вы хотите выполнить одновременно. Вы можете настроить все изменения, которые вы хотите выполнить для данной транзакции, используя такие методы, как add(), remove() и replace(). Затем, чтобы применить транзакцию к активности, вы должны вызвать commit().

Прежде чем вы вызовете commit(), вы можете вызвать addToBackStack(), чтобы добавить транзакцию в задний стек транзакций фрагментов. Этот задний стек управляется действием и позволяет пользователю вернуться к предыдущему состоянию фрагмента, нажав кнопку "Назад".

Например, здесь вы можете заменить один фрагмент на другой и сохранить предыдущее состояние в стеке:

Пример:

// Create new fragment and transaction
Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();

// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);

// Commit the transaction
transaction.commit();

Справка: Посмотрите Управление фрагментами

Надеюсь, это будет полезно!

Ответ 2

ИМХО Я не согласен с этим ответом.

Возможно, вы захотите заменить фрагмент, или вы можете его добавить.

Например, скажем, что вы находитесь в фрагменте, который является списком, полученным сетевым запросом, если вы замените фрагмент, скажем, detailFragment и добавьте его в backStack.

Когда вы вернетесь, ваш фрагмент повторит сетевой запрос, конечно, вы можете кэшировать его, но почему? Это обратное к предыдущему состоянию, поэтому с добавлением последний фрагмент будет иметь точно такой же статус без какого-либо кода.

Фрагменты прозрачны по умолчанию, потому что их можно использовать для рисования только небольшой части экрана, но если ваш фрагмент соответствует match_parent, просто установите его фон в цвет и продолжайте использовать 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();

Надеюсь, это поможет кому-то, кто хочет знать, как видеть сплошной фон, не изменяя добавление, которое требуется заменить, что обычно не самый лучший случай.

Привет

Ответ 3

Я использовал много методов, но не получал Наконец, я исправил его, добавив фон контейнера или макет фрагмента, подобный этому

android:background="@android:color/white"    

вам просто нужно добавить в свой макет или представление контейнера о вас. Фрагмент Надеюсь, что это поможет.