Bom dia para todos! Bom já pesquisei em tudo que jeito não achei o realmente o que quero é bem simples. Tenho uma Activity e nela já tenho os valores em mãos como exemplo:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Declarando o Fragment
ApresentacaoFragmentView = inflater.inflate(R.layout.fragment_apresentacao, container, false);
// Aqui é a condição para pegar os valores teste1 e teste 2
return ApresentacaoFragmentView;
}
Olá, fragment está no xml da activity? poste o xml da activity.
A
Andresilva_Bh
não este valor não esta no xml é apenas repassar o valor da Activity para fragment e este valor aparecerá uma mensagem (Toast.makeTest) no fragment
A
Andrauss
Me referi ao arquivo R.layout.activity_main, poste o código dele, pois tem formas diferentes de passar dados para um fragment, poste sua Activity por completo, e o Fragment também.
Mais uma coisa, onde você está exibindo esse fragment? dentro da Activity? Como criou a instancia do mesmo? sem o código não dá pra saber.
A
Andresilva_Bh
O Fragment esta dentro da Activyt, as rolagem funcionam tudo certo já esta com Adapter e tudo
A
Andrauss
Bom, não tenho os códigos para saber como está fazendo. Dessa forma tente uma das opções:
1 - Se você está criando a instancia do Fragment via código e usando FragmentTransaction para coloá-lo dentro da activity, use setArguments para passar os dados para ele. E no Fragment use getArguments() para pegar os dados.
2 - Se o seu Fragment estiver declarado dentro do XML da activity e você tiver a instância do mesmo obtida via getFragmentById ou getFragmentByTag, crie um método público ex: setMeuDado e passe os dados para o fragment.
Você tem um ViewPager na sua activity e quer mostrar várias páginas, cada página é um fragment, certo? Se sim poste o código da Activity pra ver como você criou seu PagerAdapter.
A
Andresilva_Bh
Este o Adapter decidir trabalhar com esse pois o baseadapter é mais para coisa robusta como é apenas um teste então usei o Adapter
public class AdapterFragmentmain extends FragmentPagerAdapter {
privateString[]strmtabtitles;publicAdapterFragmentmain(FragmentManagerfm,String[]mtabtitles){super(fm);// Setando os fragmentsthis.strmtabtitles=mtabtitles;}// Retornando os fragment@OverridepublicFragmentgetItem(intposition){switch(position){case0:returnnewApresentacaoFragment();case1:returnnewPrecoprodFragment();default:returnnull;}}// contando as views(paginas) mesma quantidade de fragments@OverridepublicintgetCount(){returnthis.strmtabtitles.length;}@OverridepublicCharSequencegetPageTitle(intposition){returnthis.strmtabtitles[position];}
}
A
Andresilva_Bh
isso cada pagina é uma fragment(Total de duas Fragments) que estão dentro da Activity
Este é a activity
public class MainActivity extends AppCompatActivity {
esta e a Fragment que tem que receber o valor teste1 e teste2
A
Solucao aceita
Andrauss
Seguinte, do jeito que seu adapter está fica muito difícil passar dados para os fragments, já que eles são criados dentro do adapter.
Vou dar a minha sugestão, externalize a criação dos Fragments, isso vai deixar seu adapter mais reusável.
publicclassAdapterFragmentmainextendsFragmentPagerAdapter{privateString[]strmtabtitles;privateList<Fragment>fragments;publicAdapterFragmentmain(FragmentManagerfm,List<Fragment>fragments,String[]mtabtitles){super(fm);// Setando os fragmentsthis.fragments=fragments;this.strmtabtitles=mtabtitles;}// Retornando os fragment@OverridepublicFragmentgetItem(intposition){returnfragments.get(position);}// contando as views(paginas) mesma quantidade de fragments@OverridepublicintgetCount(){returnthis.strmtabtitles.length;}@OverridepublicCharSequencegetPageTitle(intposition){returnthis.strmtabtitles[position];}}
Na sua activity faça assim:
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Bundle argumentos = new Bundle();
argumentos.putString("meuDado", "ABCDEFG")
ApresentacaoFragment apresentacao = new ApresentacaoFragment();
apresentacao.setArguments(argumentos);
// Ou passe direto via metodo
PrecoProdFragment preco = new PrecoprodFragment();
preco.setMeuDado("MEU DADO")
AdapterFragmentmain meuAdapter = new AdapterFragmentmain(getSupportFragmentManager(), Arrays.asList(apresentacao, preco), new String[]{"Apresentacao", "Precos"})
meuPager.setAapter(meuAdapter);
}
A
Andresilva_Bh
Estou usando apenas uma fragment para pegar o valor que vem da Activity, sabendo como faz um o resto para passar para outra eu mato a questão.
A
Andrauss
O caminho é o que passei na resposta.
A
Andresilva_Bh
Valeu vou analisar e dou retorno, muito obrigado.
A
Andrauss
Já fiz o que está tentando fazer, basicamente você tem uma tela de lançamento de venda ou pedido daí em uma aba você deve ter os dados da venda e na outra os itens. Uma dica é estudar o ciclo de vida dos fragments. Veja esse Tutorial vai ajudar.
Sempre que for perguntar forneça em detalhes o que quer fazer e de preferência poste os códigos.
A
Andresilva_Bh
Não é bem isso, pois o que da para entender como se eu tivesse querer passar os valores de uma fragment para outra Fragment e na verdade o valor é fixo na Activity e apenas repassar para a fragment, entendeu.
A
Andrauss
Entendi, eu entendi o que quer fazer (já fiz isso várias vezes), veja os códigos que te passei respondem exatamente isso. Um fragment não se comunica diretamente com o outro, somente via Activity.
A
Andresilva_Bh
Andrauss muito obrigado pela explicação deu certo. Como você falou o detalhe do problema esta no meu adapter que estava restrigindo ao seguir os seus conceitos deixando igual ao seu adapter esta normal vou deixar a resposta como ficou caso alguém venha ter o mesmo problema.
Acitivity como ficou: