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;
}
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.
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.
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 {
private String[] strmtabtitles;
public AdapterFragmentmain(FragmentManager fm, String[] mtabtitles) {
super(fm);
// Setando os fragments
this.strmtabtitles = mtabtitles;
}
// Retornando os fragment
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new ApresentacaoFragment();
case 1:
return new PrecoprodFragment();
default:
return null;
}
}
// contando as views(paginas) mesma quantidade de fragments
@Override
public int getCount() {
return this.strmtabtitles.length;
}
@Override
public CharSequence getPageTitle(int position) {
return this.strmtabtitles[position];
}
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.
public class AdapterFragmentmain extends FragmentPagerAdapter {
private String[] strmtabtitles;
private List<Fragment> fragments;
public AdapterFragmentmain(FragmentManager fm, List<Fragment> fragments, String[] mtabtitles) {
super(fm);
// Setando os fragments
this.fragments = fragments;
this.strmtabtitles = mtabtitles;
}
// Retornando os fragment
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
// contando as views(paginas) mesma quantidade de fragments
@Override
public int getCount() {
return this.strmtabtitles.length;
}
@Override
public CharSequence getPageTitle(int position) {
return this.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);
}
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.
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.
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.
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:
public class MainActivity extends AppCompatActivity {
private TabLayout tabLayout;
private ViewPager viewPager;