Bom dia, tudo bem?
Segue o código da Activity e fragment. É basicamente o mesmo para os fragments em sequência, buscar uma informação no webservice através de uma task e carregar uma lista.
Quando estou no 3º Fragment, ao clicar e abrir o site via navegador do android, ele volta para esta Activity principal.
MainActivity:
package br.com.teste;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import br.com.teste.modelo.Categoria;
import br.com.teste.modelo.Cidade;
import br.com.teste.modelo.Empresa;
public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
protected void onResume() {
super.onResume();
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction tx = manager.beginTransaction();
MainFragmentListaCategorias fragmentListaCategorias = new MainFragmentListaCategorias();
Intent intent = getIntent();
Cidade cidade = (Cidade) intent.getSerializableExtra("cidade");
Bundle params = new Bundle();
params.putSerializable("cidade", cidade);
fragmentListaCategorias.setArguments(params);
tx.replace(R.id.frame_principal, fragmentListaCategorias);
tx.commit();
}
public void carregaCategoria(Cidade cidade, Categoria categoria) {
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction tx = manager.beginTransaction();
MainFragmentListaEmpresas fragmentListaEmpresas = new MainFragmentListaEmpresas();
Bundle params = new Bundle();
params.putSerializable("cidade", cidade);
params.putSerializable("categoria", categoria);
fragmentListaEmpresas.setArguments(params);
tx.replace(R.id.frame_principal, fragmentListaEmpresas);
tx.addToBackStack(null);
tx.commit();
}
public void carregaEmpresa(Empresa empresa) {
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction tx = manager.beginTransaction();
MainFragmentEmpresa fragmentEmpresa = new MainFragmentEmpresa();
Bundle params = new Bundle();
params.putSerializable("empresa", empresa);
fragmentEmpresa.setArguments(params);
tx.replace(R.id.frame_principal, fragmentEmpresa);
tx.addToBackStack(null);
tx.commit();
}
}
MainFragmentListaCategorias:
package br.com.teste;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.List;
import br.com.teste.modelo.Categoria;
import br.com.teste.modelo.Cidade;
import br.com.teste.scripts.BuscaListaCategoriasTASK;
public class MainFragmentListaCategorias extends Fragment {
private String idCidade;
private View view;
private Context context;
private ListView lista;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_main_lista_categorias, container, false);
context = view.getContext();
lista = (ListView) view.findViewById(R.id.main_lista_categorias_list);
Bundle params = getArguments();
final Cidade cidade = (Cidade) params.getSerializable("cidade");
idCidade = cidade.getId();
lista.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Categoria categoria = (Categoria) parent.getItemAtPosition(position);
MainActivity mainActivity = (MainActivity) getActivity();
mainActivity.carregaCategoria(cidade, categoria);
}
});
new BuscaListaCategoriasTASK(this, idCidade).execute();
return view;
}
public void onResume() {
super.onResume();
}
public void populaList(List<Categoria> categorias) {
ArrayAdapter adapterCategorias = new ArrayAdapter(context, android.R.layout.simple_list_item_1, categorias);
lista.setAdapter(adapterCategorias);
}
}
BuscaListaCategoriasTASK:
package br.com.teste.scripts;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
import br.com.teste.MainFragmentListaCategorias;
import br.com.teste.converter.CidadeConverter;
import br.com.teste.modelo.Categoria;
import br.com.teste.receiver.WebClientBuscaCategorias;
public class BuscaListaCategoriasTASK extends AsyncTask<Void, Void, String> {
private final String idCidade;
private MainFragmentListaCategorias fragmentCategorias;
private ProgressDialog dialog;
private Context context;
public BuscaListaCategoriasTASK(MainFragmentListaCategorias fragmentCategorias, String idCidade){
this.fragmentCategorias = fragmentCategorias;
this.idCidade = idCidade;
this.context = fragmentCategorias.getContext();
}
protected void onPreExecute() {
dialog = ProgressDialog.show(context, "","", true, true);
}
protected String doInBackground(Void... params) {
CidadeConverter conversor = new CidadeConverter();
String json = conversor.converteParaJSON(idCidade);
WebClientBuscaCategorias client = new WebClientBuscaCategorias();
String resposta = client.post(json);
return resposta;
}
protected void onPostExecute(String resposta) {
dialog.dismiss();
try {
JSONObject json = new JSONObject(resposta);
JSONArray categoriasJSONArray = json.getJSONArray("categorias");
List<Categoria> categoriasList = new ArrayList();
for (int i = 0; i < categoriasJSONArray.length(); i++) {
Categoria categoria = new Categoria();
JSONObject categoriaJSONObject = categoriasJSONArray.getJSONObject(i);
String idCategoria = categoriaJSONObject.getString("id");
String nomeCategoria = categoriaJSONObject.getString("nome");
String qtdeCategoria = categoriaJSONObject.getString("quantidade");
categoria.setId(idCategoria);
categoria.setNome(nomeCategoria);
categoria.setQtde(qtdeCategoria);
categoriasList.add(categoria);
}
fragmentCategorias.populaList(categoriasList);
} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(context, "Erro ao carregar lista de categorias...", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
}
}