Я разрабатываю приложение, которое содержит 2 фрагмента, и я хочу показать скрытие в соответствии с моими потребностями. В следующем коде есть простой пример моей проблемы. Это простое действие Fragmentactivity содержит 1 кнопку и один фрагмент списка.
Этот простой пример работает безупречно. но меня не устраивает фрагмент показать скрыть. Если вы удалите layout.setVisibility (View.GONE); из кода затем ft.hide (f); не скроет фрагмент. Фактически мы не скрываем фрагмент, мы скрываем контейнер.
Мой вопрос: это способ показать скрытые фрагменты? Если нет, то объясните с помощью проверенного примера Как скрыть и показать фрагменты, потому что с этой проблемой сталкивается множество людей.
public class MainActivity extends FragmentActivity implements OnClickListener {
Fragment1 f;
Button b;
LinearLayout layout;
Fragment myf;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b = (Button) findViewById(R.id.button1);
layout = (LinearLayout) findViewById(R.id.ll);
f = new Fragment1();
}
@Override
public void onClick(View v) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out);
if (f.isHidden()) {
ft.show(f);
layout.setVisibility(View.VISIBLE);
b.setText("Hide");
} else {
ft.hide(f);
b.setText("Show");
layout.setVisibility(View.GONE);
}
ft.commit();
// TODO Auto-generated method stub
}
android
android-fragments
show-hide
abidkhan303
источник
источник
Ответы:
Не связывайтесь с флагами видимости контейнера - FragmentTransaction.hide / show делает это за вас.
Итак, правильный способ сделать это:
ИЛИ если вы используете android.support.v4.app.Fragment
источник
android.R.animator.fade_in
иandroid.R.animator.fade_out
?Кроме того, вы можете сделать во фрагменте (например, при сбое получения данных сервера):
источник
getView()
может быть ,null
когда он еще не инициализирован.Привет, вы делаете это, используя этот подход, все фрагменты останутся в контейнере после первоначального добавления, а затем мы просто открываем нужный фрагмент и скрываем другие внутри контейнера.
См. Https://github.com/codepath/android_guides/wiki/Creating-and-Using-Fragments для получения дополнительной информации. Я надеюсь, что смогу кому-нибудь помочь. Даже если это старый вопрос.
источник
источник
Попробуй это:
источник
Из моего кода, по сравнению с приведенным выше решением, самый простой способ - определить макет, содержащий фрагмент, затем вы можете скрыть или отобразить фрагмент, контролируя атрибут макета, который соответствует общему способу просмотра. В этом случае дополнительный код не требуется, и дополнительные атрибуты развертывания фрагмента могут быть перемещены во внешний макет.
источник
Это сработало для меня
источник
ответы здесь верны, и мне понравилась идея @Jyo the Whiff о реализации фрагмента показать и скрыть, за исключением того, что он сейчас скроет фрагмент при первом запуске, поэтому я добавил небольшое изменение в том, что я добавил проверку isAdded и покажу фрагмент, если его еще нет
источник
В onCreate после setContentView я спрятал два фрагмента и передал их диспетчеру фрагментов, но я не скрывал первый фрагмент, который будет служить домом.
Ссылка: https://medium.com/@oluwabukunmi.aluko/bottom-navigation-view-with-fragments-a074bfd08711
источник
Возможно, я опоздаю, но это может помочь кому-то в будущем.
Этот ответ является модификацией
mangu23
ответаЯ добавил только цикл for, чтобы избежать повторения и легко добавить больше фрагментов без шаблонного кода.
Для начала нам нужен список фрагментов, которые должны отображаться
Затем нам нужно заполнить его нашими фрагментами
И нам нужен способ узнать, какой фрагмент был выбран из списка, поэтому нам нужна
getFragmentIndex
функцияИ, наконец,
displayFragment
способ будет таким:Таким образом мы можем позвонить
displayFragment(homeFragment)
например.Это автоматически покажет
HomeFragment
и скроет любой другой фрагмент в списке.Это решение позволяет вам добавлять больше фрагментов в
fragmentList
без повторенияif
операторов в старойdisplayFragment
версии.Надеюсь, кому-то это пригодится.
источник