Tworzę aplikację, która zawiera 2 fragmenty i chcę pokazać hide w zależności od potrzeb. Poniższy kod zawiera prosty przykład mojego problemu. Ta prosta aktywność fragmentaryczna zawiera 1 przycisk i jeden fragment listy.
Ten prosty przykład działa bez zarzutu. ale nie jestem zadowolony z fragmentu show hide. Jeśli usuniesz layout.setVisibility (View.GONE); z kodu, a następnie ft.hide (f); nie ukryje fragmentu. W rzeczywistości nie ukrywamy fragmentu, który ukrywamy kontener.
Moje pytanie brzmi: czy to jest sposób na pokazanie ukrytych fragmentów? Jeśli nie, wyjaśnij za pomocą testowanego przykładu Jak ukryć i pokazać fragmenty, ponieważ wiele osób boryka się z tym problemem.
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
źródło
źródło
Odpowiedzi:
Nie zadzieraj z flagami widoczności kontenera - FragmentTransaction.hide / show robi to wewnętrznie za Ciebie.
Zatem prawidłowy sposób na zrobienie tego to:
LUB jeśli używasz android.support.v4.app.Fragment
źródło
android.R.animator.fade_in
iandroid.R.animator.fade_out
?Dodatkowo możesz zrobić we fragmencie (na przykład gdy nie udało się pobrać danych z serwera):
źródło
getView()
może być,null
gdy nie jest jeszcze zainicjowany.Cześć, robisz to używając tego podejścia, wszystkie fragmenty pozostaną w kontenerze po ich wstępnym dodaniu, a następnie po prostu odsłaniamy żądany fragment i ukrywamy pozostałe w kontenerze.
Więcej informacji można znaleźć na https://github.com/codepath/android_guides/wiki/Creating-and-Using-Fragments . Mam nadzieję, że komukolwiek pomogę. Nawet jeśli jest to stare pytanie.
źródło
źródło
Spróbuj tego:
źródło
Z mojego kodu, w porównaniu do powyższego rozwiązania, najprościej jest zdefiniować układ, który zawiera fragment, a następnie można ukryć lub odkryć ten fragment, kontrolując atrybut układu, który jest zgodny z ogólnym sposobem widoku. W tym przypadku nie jest potrzebny żaden dodatkowy kod, a dodatkowe atrybuty wdrożenia fragmentu można przenieść do układu zewnętrznego.
źródło
To zadziałało dla mnie
źródło
odpowiedzi tutaj są poprawne i podobał mi się pomysł na @Jyo Whiff dotyczący implementacji fragmentów pokazujących i ukrywających, z wyjątkiem tego, że sposób, w jaki obecnie ma, ukrywałby fragment przy pierwszym uruchomieniu, więc dodałem niewielką zmianę, dodając isAdded check and show fragment, jeśli jeszcze nie jest
źródło
W onCreate, po setContentView, ukryłem dwa fragmenty i przekazałem je do menedżera fragmentów, ale nie ukryłem pierwszego fragmentu, który będzie służył jako dom.
Odniesienie: https://medium.com/@oluwabukunmi.aluko/bottom-navigation-view-with-fragments-a074bfd08711
źródło
Może jestem o wiele za późno, ale może to komuś pomóc w przyszłości.
Ta odpowiedź jest modyfikacją
mangu23
odpowiedziDodałem tylko pętlę for, aby uniknąć powtórzeń i łatwo dodać więcej fragmentów bez standardowego kodu.
Najpierw potrzebujemy listy fragmentów, które mają zostać wyświetlone
Następnie musimy wypełnić go naszymi fragmentami
Potrzebujemy sposobu, aby wiedzieć, który fragment został wybrany z listy, więc potrzebujemy
getFragmentIndex
funkcjiI wreszcie
displayFragment
metoda będzie wyglądać tak:W ten sposób możemy
displayFragment(homeFragment)
na przykład zadzwonić .Spowoduje to automatyczne wyświetlenie
HomeFragment
i ukrycie dowolnego innego fragmentu na liście.Takie rozwiązanie pozwala na dołączanie większej liczby fragmentów do pliku
fragmentList
bez konieczności powtarzaniaif
instrukcji ze starejdisplayFragment
wersji.Mam nadzieję, że komuś to się przyda.
źródło