1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

[Android]

Discussão em 'Mobile' iniciado por Stack, Junho 17, 2021.

  1. Stack

    Stack Membro Participativo

    estou iniciando em android mas com algumas dificuldades sobre como navegar com botões de anterior e próximo entre fragments de uma activity. Tenho esta activity que possui um arraylist de Passos e um Fragment. Dentro dela, gostaria de conforme fosse selecionado os botões de anterior e próximo, fossem alterados os dados contidos no fragment seguindo a ordem destes Passos. O OnCreate da Activity está da seguinte forma:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_passo_a_passo);
    int numPasso = 0;
    btAnterior = (Button) findViewById(R.id.btAnterior);
    btProximo = (Button) findViewById(R.id.btProximo);
    listaPassos = getIntent().getParcelableArrayListExtra("lista");

    //Inicializando o fragmento
    FragmentManager manager = getSupportFragmentManager();
    final FragmentTransaction f = manager.beginTransaction();
    final PassoFragment fragmento = new PassoFragment();

    //Passando o passo atual para o Fragment pelo bundle
    Bundle bundle = new Bundle();
    passoAtual = listaPassos.get(numPasso);
    bundle.putParcelable("passoAtual",passoAtual);
    fragmento.setArguments(bundle);
    f.add(R.id.frag, fragmento);
    f.commit();

    btAnteriorF.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    //Decrementa o número do Passo e substitui o fragmento com os dados novos
    numPasso--;
    Bundle bundle2 = new Bundle();
    bundle2.putParcelable("passoAtual",listaPassos.get(numPasso));
    FragmentManager managerF = getSupportFragmentManager();
    final FragmentTransaction f2 = managerF.beginTransaction();
    final PassoFragment fragmento2 = new PassoFragment();
    fragmento2.setArguments(bundle2);
    f2.replace(R.id.frag, fragmento2);
    f2.commit();
    }
    });
    btProximoF.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    //Incrementa o número do Passo e substitui o fragmento com os dados novos
    numPasso++;
    Bundle bundle2 = new Bundle();
    bundle2.putParcelable("passoAtual",listaPassos.get(numPasso));
    FragmentManager managerF = getSupportFragmentManager();
    final FragmentTransaction f2 = managerF.beginTransaction();
    final PassoFragment fragmento2 = new PassoFragment();
    fragmento2.setArguments(bundle2);
    f2.replace(R.id.frag, fragmento2);
    f2.commit();
    }
    });
    }


    E o código do Fragment que recebe da Activity pelo bundle um objeto Passo da lista:

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    //Pegando retorno do bundle:
    Bundle bundleRetorno = this.getArguments();
    if(bundleRetorno != null){
    Passo passoAtual = bundleRetorno.getParcelable("passoAtual");
    }
    numPasso = passoAtual.getNumPasso();

    // Inflate the layout for this fragment
    View v = inflater.inflate(R.layout.fragment_passo, container, false);
    passo = v.findViewById(R.id.numPassoAtualFrag);
    descricaoPasso = v.findViewById(R.id.descricaoPassoFrag);
    imgPasso = v.findViewById(R.id.imgPassoAtualFrag);

    //Setando as informações no fragmento:
    descricaoPasso.setText(passoAtual.getDescricaoPasso());
    passo.setText("Passo "+passoAtual.getNumPasso());
    Picasso.get().load(passoAtual.getImagemURL()).into(imgPasso);

    return v;
    }


    Minha ideia era usar a variável "numPassos" para situar qual o passo atual da lista, mas dá erro de "Variable 'numPasso' is acessed from whitin inner class" nas operações em que tento incrementar ou decrementar a variável na Activity.

    Continue reading...

Compartilhe esta Página