Estou desenvolvendo um aplicativo que contém 2 fragmentos e quero mostrar hide de acordo com minha necessidade. O código a seguir tem um exemplo simples do meu problema. Esta Fragmentactivity simples contém 1 botão e um listfragment.
Este exemplo simples funciona sem falhas. mas não estou satisfeito com show hide fragmento. Se você remover layout.setVisibility (View.GONE); do código, em seguida, ft.hide (f); não vai esconder fragmento. Na verdade, não estamos escondendo fragmentos, estamos escondendo um container.
Minha pergunta é: essa é uma maneira de mostrar fragmentos ocultos? Caso contrário, explique com um exemplo testado como ocultar e mostrar fragmentos porque muitas pessoas estão enfrentando esse problema.
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
fonte
fonte
Respostas:
Não mexa com os sinalizadores de visibilidade do contêiner - FragmentTransaction.hide / show faz isso internamente para você.
Portanto, a maneira correta de fazer isso é:
OU se você estiver usando android.support.v4.app.Fragment
fonte
android.R.animator.fade_in
eandroid.R.animator.fade_out
?Além disso, você pode fazer em um fragmento (por exemplo, ao obter dados do servidor com falha):
fonte
getView()
pode sernull
quando ele ainda não foi inicializado.Olá, você faz isso usando esta abordagem, todos os fragmentos permanecerão no contêiner uma vez adicionados inicialmente e então estamos simplesmente revelando o fragmento desejado e escondendo os outros dentro do contêiner.
Consulte https://github.com/codepath/android_guides/wiki/Creating-and-Using-Fragments para obter mais informações. Espero poder ajudar alguém. Mesmo que seja uma pergunta antiga.
fonte
fonte
Experimente isto:
fonte
Do meu código, comparando com a solução acima, a maneira mais simples é definir um layout que contém o fragmento, então você pode ocultar ou reexibir o fragmento controlando o atributo de layout que está alinhado com a visão geral. Nenhum código adicional necessário neste caso e os atributos de implantação adicionais do fragmento podem ser movidos para o layout externo.
fonte
Isso funcionou para mim
fonte
as respostas aqui estão corretas e eu gostei de @Jyo, a ideia de Whiff de uma implementação de mostrar e ocultar o fragmento, exceto que a forma como ele o faz atualmente esconderia o fragmento na primeira execução, então eu adicionei uma pequena mudança em que adicionei a verificação e exibição isAdded o fragmento se ainda não for
fonte
Em onCreate, após setContentView, eu escondi dois fragmentos e os enviei para o gerenciador de fragmentos, mas não escondi o primeiro fragmento que servirá como home.
Ref: https://medium.com/@oluwabukunmi.aluko/bottom-navigation-view-with-fragments-a074bfd08711
fonte
Posso ser tarde demais, mas pode ajudar alguém no futuro.
Esta resposta é uma modificação para
mangu23
resposta queeu adicionei apenas um loop for para evitar a repetição e adicionar facilmente mais fragmentos sem código clichê.
Primeiro precisamos de uma lista dos fragmentos que devem ser exibidos
Então, precisamos preenchê-lo com nossos fragmentos
E precisamos de uma maneira de saber qual fragmento foi selecionado da lista, então precisamos da
getFragmentIndex
funçãoE, finalmente, o
displayFragment
método será assim:Desta forma, podemos chamar,
displayFragment(homeFragment)
por exemplo.Isso mostrará automaticamente
HomeFragment
e ocultará qualquer outro fragmento da lista.Esta solução permite anexar mais fragmentos ao
fragmentList
sem ter que repetir asif
instruções dadisplayFragment
versão anterior.Espero que alguém ache isso útil.
fonte