Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Problema no uso de fragmentos

Minha activity principal ProvaActivity deixou de extender Activity para extender FragmentActivity.

Depois, no método onCreate tenho duas situações a tratar:

if( isTablet() ) {
     transaction.replace(R.id.prova_list, new ListaProvasFragment());
     transaction.replace(R.id.prova_detail, new DetalheProvaFragment());
} else {
     transaction.replace(R.id.prova_list, new ListaProvasFragment());
}

Neste código foi utilizado o mesmo fragmento (ListaProvasFragment) tanto para a situação da carga da lista para um tablet quanto para outro dispositivo.

Quando não estamos carregando de um tablet, preciso fazer com que o click em uma prova me leve para a tela de detalhe da prova.

Como faço isso?

Tentei desta forma, mas não funcionou:

package com.marciob.app.addressbook.fragment;

import java.util.List;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.marciob.app.addressbook.R;
import com.marciob.app.addressbook.activities.ProvaActivity;
import com.marciob.app.addressbook.model.Prova;
import com.marciob.app.addressbook.persistence.ProvaDAO;

public class ListaProvasFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_prova_list, null);

        // put data on the list
        ProvaDAO dao = new ProvaDAO(this.getActivity());
        ListView listView = (ListView) view.findViewById(R.id.prova_list);
        List<Prova> provas = dao.all();
        listView.setAdapter(new ArrayAdapter<Prova>(this.getActivity(), android.R.layout.simple_list_item_1, provas));

        listView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> adapter, View view, int position, long id) {
                Prova selected = (Prova) adapter.getItemAtPosition(position);
                ProvaActivity calendario = (ProvaActivity) getActivity();
                calendario.setSelected(selected);

                if( !isTabletOnLandscape() ) {
                    FragmentTransaction transaction = calendario.getSupportFragmentManager().beginTransaction();
                    transaction.replace(R.id.prova_list, new DetalheProvaFragment());
                    transaction.commit();
                }
            }
        });

        return view;
    }


    private boolean isTabletOnLandscape() {
        return this.getResources().getBoolean(R.bool.isTabletOnLandscape);
    }
}
4 respostas

Oi Marcio,

Os exercícios 21 (http://www.alura.com.br/course/DROI3/section/4/exercise/21), 22 e 23 da sessão 4 - Fragments e o Pacote de Compatibilidade abordam justamente esta sua dúvida.

Bons estudos!

Obrigado pela resposta. Eu fiz o treinamento ontem e por isso fiquei com essa dúvida. De qualquer forma, vou revisar meu código para ver se consigo resolver.

Oi Marcio, legal!

Mas se mesmo após os exercícios ficar alguma dúvida, pode perguntar aqui :)

Bons estudos!

solução!

Obrigado Suelen,

Eu fiz a maior confusão porque normalmente assisto primeiro o vídeo e depois vou fazendo o código e os exercícios ao mesmo tempo.

O problema é que o código mostrado no vídeo sempre é diferente do código dos exercícios.

Por isso tive problemas.

Mas fiz alguns ajustes e consegui deixar funcionando tanto em smartphone quanto em tablet.

Obrigado