Фрагмент прозрачен и показывает активность ниже
Приложение для 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).
Спасибо
Ответы
Ответ 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"
вам просто нужно добавить в свой макет или представление контейнера о вас. Фрагмент
Надеюсь, что это поможет.