ListView JSON com Fragment

61 views
Skip to first unread message

Cleidimar Viana

unread,
Feb 27, 2015, 8:23:25 PM2/27/15
to androidb...@googlegroups.com
Olá Pessoal, 

estou tentando fazer uma adaptação para visualizar uma lista de dados em um Fragment porém não estou conseguindo. Estou usando o Volley em uma Activity, mas não consigo passar para um Fragment. Alguém tem alguma sugestão?!

Levi Saturnino

unread,
Feb 28, 2015, 2:33:35 AM2/28/15
to androidb...@googlegroups.com
Posso lhe ajudar, poderia disponibilizar o código?

Em 27 de fevereiro de 2015 22:23, Cleidimar Viana <cleidim...@gmail.com> escreveu:
Olá Pessoal, 

estou tentando fazer uma adaptação para visualizar uma lista de dados em um Fragment porém não estou conseguindo. Estou usando o Volley em uma Activity, mas não consigo passar para um Fragment. Alguém tem alguma sugestão?!

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
------------------------------------------------------------
Levi José de S. S. Dias
Twitter/Skype: levisaturnino
Formado......: Informática para Internet - IFPE / Técnico em Informática - Leiaut
Cursando.....: Sistemas de Informação - UPE                     


Cleidimar Viana

unread,
Feb 28, 2015, 8:25:40 AM2/28/15
to androidb...@googlegroups.com
Olá Levi,

tenho a minha Main assim:

public class ActivityMain extends Activity {
// Log tag
private static final String TAG = ActivityMain.class.getSimpleName();

// Movies json url
private static final String url = "http://api.androidhive.info/json/movies.json";
private List<Movie> movieList = new ArrayList<Movie>();
private ListView listView;
private CustomListAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);

listView = (ListView) findViewById(R.id.list);
//adapter = new CustomListAdapter(this, movieList);
listView.setAdapter(adapter);

// Creating volley request obj
JsonArrayRequest movieReq = new JsonArrayRequest(url,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.d(TAG, response.toString());
// Parsing json
for (int i = 0; i < response.length(); i++) {
try {

JSONObject obj = response.getJSONObject(i);
Movie movie = new Movie();
movie.setTitle(obj.getString("title"));
movie.setThumbnailUrl(obj.getString("image"));
// adding movie to movies array
movieList.add(movie);

} catch (JSONException e) {
e.printStackTrace();
}

}

// notifying list adapter about data changes
// so that it renders the list view with updated data
adapter.notifyDataSetChanged();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
}
});

// Adding request to request queue
AppController.getInstance().addToRequestQueue(movieReq);
}


}

E o Fragment: 

public class HomeFragment extends Fragment {
public HomeFragment(){}
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
 
        View rootView = inflater.inflate(R.layout.fragment_home, container, false);
         
        return rootView;
    }
}

Não estou conseguindo listar os mesmos dados com Fragment. Se puder me ajudar, vou ficar muito agradecido.

Cleidimar Viana

unread,
Feb 28, 2015, 8:28:36 AM2/28/15
to androidb...@googlegroups.com
Detalhe, estou usando este projeto do Androidhive como base e o Volley.

Levi Saturnino

unread,
Feb 28, 2015, 1:15:54 PM2/28/15
to androidb...@googlegroups.com
Beleza, já diz isso a muito tempo e nem sei como ta hoje. Primeiramente onde tá a listeview no fragment, pq estou vendo que não vai mostrar nada mesmo vc fez numa activity e não no fragment. vamos analisar as coisas com calma para vc entender. . . 

Cleidimar Viana

unread,
Feb 28, 2015, 3:16:11 PM2/28/15
to androidb...@googlegroups.com
Obrigado Levi, nada que uma boa pesquisada e um pouco de lógica não resolva. Conseguir fazer o que queria! Geralmente venho aqui no grupo apenas quando estou muito desesperado para resolver alguma coisa, no entanto, é só apelar um pouco para o stackoverflow?!  Agradeço muito a boa vontade! Não vou postar solução aqui porque é uma coisa muito específica. Quando alguém tiver a mesma dúvida, vou fazer questão de ajudar.

Everton Machado

unread,
Feb 28, 2015, 6:24:11 PM2/28/15
to androidb...@googlegroups.com
Aproveitando o assunto, tenho uma activity do drawer onde chamo os fragments um desses fragments eu carrego uma lista, a tela de cadastrar os itens dessa lista eu chamo uma activity, não estou conseguindo fazer ele atualuzar a lista no fragment quando eu adiciono um novo item a a ela. Algum de vocês poderiam me dar uma luz?? 

Cleidimar Viana

unread,
Feb 28, 2015, 6:27:49 PM2/28/15
to androidb...@googlegroups.com
Já experimentou fazer um reload no fragment?!

@Override
protected void onResume() {

   super.onResume();
   this.onCreate(null);
}


Att.
Cleidimar V. Santos
Software Developer e Co-fundador da Workingbox
Graduando em Ciência da Computação - UFMS/CPPP

--
You received this message because you are subscribed to a topic in the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/androidbrasil-dev/KhFadzmHi6Y/unsubscribe.
To unsubscribe from this group and all its topics, send an email to androidbrasil-...@googlegroups.com.

Everton Machado

unread,
Feb 28, 2015, 6:56:42 PM2/28/15
to androidb...@googlegroups.com
Putz eu pensava que o onResume era um mento somente da Activity, mas fiz aqui no fragment e deu certo, vlw :D

Levi Saturnino

unread,
Mar 1, 2015, 1:15:18 AM3/1/15
to androidb...@googlegroups.com
Okey, qualquer coisa é só mandar que eu estarei mais frequente aqui. Todo mundo tem dúvida com certeza. 

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

Everton Machado

unread,
Mar 1, 2015, 1:52:06 AM3/1/15
to androidb...@googlegroups.com
Vlw Levi :DD

luciofm

unread,
Mar 1, 2015, 8:23:48 PM3/1/15
to androidb...@googlegroups.com

@Override
protected void onResume() { super.onResume(); this.onCreate(null); }
NÃOOOOOO.... Dessa forma você irá chamar o onCreate 2 vezes toda vez que criar o Fragment.

Você nunca deve chamar métodos do lifecycle fora dele...

Você pode ter um método para fazer reload e chama-lo no onResume, mas chamar this.onCreate no onResume é errado..

Levi Saturnino

unread,
Mar 1, 2015, 10:13:31 PM3/1/15
to androidb...@googlegroups.com
Sinceramente eu nunca vi isso também. Mas ele disse que resolveu o problema dela, eu fiquei calado. Mas achei muito estranho isso. Tenho mais de 3 anos com Android e nunca vi isso!

Cleidimar Viana

unread,
Mar 1, 2015, 10:26:31 PM3/1/15
to androidb...@googlegroups.com
Bom, comigo sempre funcionou assim. Pode ser que seja mesmo um pecado em questão desempenho e performance da aplicação, mas nunca tive nenhum problema em fazer usar esse método. Por favor Luciofm, teria como você detalhar!?!

Att.


Att.
Cleidimar V. Santos
Software Developer e Co-fundador da Workingbox
Graduando em Ciência da Computação - UFMS/CPPP

Rudson Lima

unread,
Mar 1, 2015, 10:40:11 PM3/1/15
to androidb...@googlegroups.com

Acreditando que esteja usando o startActivityForResult(Intent, int) na hora de chamar a tela de cadastro. No hora que vc salva o item e o result deve está indo para sua Activity Drawer e não pro seu fragmento.

Da uma olhada no onActivityResult da sua Activity Drawer e veja se não está caindo lá.

Vc pode usar o FragmentManager para acessar o seu método que atualiza a lista no fragmento ou então cria um Listener.

O que possa está acontecendo é que quando o item é salvo

Jade Costa

unread,
Mar 2, 2015, 11:15:54 AM3/2/15
to androidb...@googlegroups.com
No meu entendimento, vc não deveria chamar o onCreate diretamente porque ele é um hook do framework. O framework é que deveria chamar ele.

Se tem algo que você necessita que seja chamado no onCreate e no onResume, talvez seja melhor criar um método seu e colocar o código lá. (apenas uma ideia :) )

Se um dia alguém mexer nesse código, esse lance de chamar o onCreate dentro do onResume vai deixar o cara beeeeeem confuso.

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
Jade Moreira da Costa

luciofm

unread,
Mar 2, 2015, 12:18:44 PM3/2/15
to androidb...@googlegroups.com
Caso clássico que já peguei quando fazia consultoria.

O cliente tinha uma Activity ou um Fragment (não importa, ambos tem ciclos de vida bem semelhantes) com uma lista de dados vindos de um WebService, e esses dados eram paginados...

No onCreate era feita a chamada para popular essa lista com a primeira 'pagina' (page 1, o parametro enviado para o webservice) de informações e adiciona os dados no seu adapter que está vazio.

network.loadDados(1 <- primeira pagina)

e na resposta:
adapter.addAll(items);

E no onResume o cliente fazia exatamente o que você falou, this.onCreate(null);

O problema que ele queria resolver era que a primeira pagina sempre era repetida.

Vejamos o ciclo de vida de uma activity

onCreate -> onStart -> onResume

e de um Fragment

onAttach -> onCreate -> onCreateView -> onViewCreated -> onStart -> onResume

Consegue enxergar o problema? O porque ele sempre tinha a primeira pagina repetida?

Reply all
Reply to author
Forward
0 new messages