Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] Dificuldades com ListView

09-11 16:06:23.828: I/listview(510): click
09-11 16:06:23.847: D/AndroidRuntime(510): Shutting down VM
09-11 16:06:23.847: W/dalvikvm(510): threadid=1: thread exiting with uncaught exception (group=0x40015560)
09-11 16:06:23.908: E/AndroidRuntime(510): FATAL EXCEPTION: main
09-11 16:06:23.908: E/AndroidRuntime(510): java.lang.NullPointerException
09-11 16:06:23.908: E/AndroidRuntime(510): at com.hamdyghanem.httprequest.Menu$2.onItemClick(Menu.java:118)
09-11 16:06:23.908: E/AndroidRuntime(510): at android.widget.AdapterView.performItemClick(AdapterView.java:284)
09-11 16:06:23.908: E/AndroidRuntime(510): at android.widget.ListView.performItemClick(ListView.java:3513)
09-11 16:06:23.908: E/AndroidRuntime(510): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812)
09-11 16:06:23.908: E/AndroidRuntime(510): at android.os.Handler.handleCallback(Handler.java:587)
09-11 16:06:23.908: E/AndroidRuntime(510): at android.os.Handler.dispatchMessage(Handler.java:92)
09-11 16:06:23.908: E/AndroidRuntime(510): at android.os.Looper.loop(Looper.java:123)
09-11 16:06:23.908: E/AndroidRuntime(510): at android.app.ActivityThread.main(ActivityThread.java:3683)
09-11 16:06:23.908: E/AndroidRuntime(510): at java.lang.reflect.Method.invokeNative(Native Method)
09-11 16:06:23.908: E/AndroidRuntime(510): at java.lang.reflect.Method.invoke(Method.java:507)
09-11 16:06:23.908: E/AndroidRuntime(510): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
09-11 16:06:23.908: E/AndroidRuntime(510): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
09-11 16:06:23.908: E/AndroidRuntime(510): at dalvik.system.NativeStart.main(Native Method)
package com.hamdyghanem.httprequest;

import java.util.ArrayList;
import java.util.List;


import android.app.Activity;
import android.content.Intent;
import android.content.res.Resources;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;
import android.widget.Toast;

public class Menu extends Activity {
/** Called when the activity is first created. */
private boolean primeiraSelecao = true;
private SQLiteAdapter mySQLiteAdapter;
ListView Lista;

SimpleCursorAdapter cursorAdapter;
Cursor cursor;

@Override
public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.menu);

// iniciando SQLite
mySQLiteAdapter = new SQLiteAdapter(this);
mySQLiteAdapter.openToWrite();

// Amarrando o objeto spinner com a view Spinner do XML
final Spinner spinner = (Spinner) findViewById(R.id.Spinner);

//Evento onClick das categorias
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView parent, View arg1, int arg2, long arg3) {
Categoria p = (Categoria) parent.getSelectedItem();
Log.i("carregando categorias",p.getCodigo());
CarregandoProdutos(Integer.parseInt(p.getCodigo()));
//Toast.makeText(Menu.this, "Categoria Selecionada: " + p.getCodigo() + p.getNome(), Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView arg0) {
}
});

//Cria Array para criar a Lista de produtos e categorias
List<Categoria> categorias = new ArrayList<Categoria>();

Resources r = getResources();

Log.i("","carregando produtos"); //-------------------------------------------------------------------------------
CarregandoProdutos(0);

Log.i("","carregando categorias"); //-------------------------------------------------------------------------------
//Carrega lista de produtos com o seb server
cursor = mySQLiteAdapter.queryCategorias();
Log.i("","setando p primeira posição");
//String[] from2 = new String[]{SQLiteAdapter.KEY_ID, SQLiteAdapter.KEY_CONTENT1, SQLiteAdapter.KEY_CONTENT2};
cursor.moveToFirst();
while(!cursor.isAfterLast()) {
Log.i("", cursor.getString(0)+"/"+cursor.getString(1));
//int resId = r.getIdentifier("prato"+cursor.getString(0),"drawable", getPackageName());
categorias.add(new Categoria( cursor.getString(0).toString(), cursor.getString(1).toString() ) );
cursor.moveToNext();
}
cursor.close();
Log.i("Adapter","Criando adapter2");
CategoriaAdapter adapter2 = new CategoriaAdapter(getApplicationContext(),categorias);
// Configura o spinner para usar o adapter para carregar as Categorias.
Log.i("Adapter","referenciando adapter2");
spinner.setAdapter(adapter2);
Log.i("Adapter","adapter2 concluido");
}


public void CarregandoProdutos(int Categoria){
//Cria Array para criar a Lista de produtos e categorias
List<Produto> produtos = new ArrayList<Produto>();
Resources r = getResources();

//Carrega lista de produtos com o seb server
cursor = mySQLiteAdapter.queryProdutos(Categoria);
//String[] from2 = new String[]{SQLiteAdapter.KEY_ID, SQLiteAdapter.KEY_CONTENT1, SQLiteAdapter.KEY_CONTENT2};
cursor.moveToFirst();
while(!cursor.isAfterLast()) {
//Log.i("", cursor.getString(0)+"/"+cursor.getString(1)+"/"+cursor.getString(2));
int resId = r.getIdentifier("prato"+cursor.getString(0),"drawable", getPackageName());
produtos.add(new Produto(cursor.getString(0), cursor.getString(1), resId, cursor.getString(2)));
cursor.moveToNext();
}
cursor.close();

ProdutoAdapter adapter = new ProdutoAdapter(getApplicationContext(),produtos);

//Amarra um objeto ListView com o ListView declarado no XML.
ListView lv = (ListView) findViewById(R.id.Lista);
lv.setAdapter(adapter);

Log.i("onitemclicklistener","inicio");
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
Log.i("listview","click");
Produto p = (Produto) arg0.getSelectedItem();
Log.i("listview",p.getNome());
}
});
Log.i("onitemclicklistener","fim");

}

}
package com.hamdyghanem.httprequest;

public class Produto {
private String nome;
private int imgRes;
private String valor;
private String codigo;

public Produto(String codigo, String nome, int imgRes, String valor) {
this.codigo = codigo;
this.nome = nome;
this.imgRes = imgRes;
this.valor = valor;
}

public String getCodigo() {
return codigo;
}

public void setCodigo(String codigo) {
this.codigo = codigo;
}

public String getNome() {
return nome;
}

public void setNome(String nome) {
this.nome = nome;
}

public int getImgRes() {
return imgRes;
}

public void setImgRes(int imgRes) {
this.imgRes = imgRes;
}

public String getValor() {
return valor;
}

public void setvalor(String valor) {
this.valor = valor;
}


}
package com.hamdyghanem.httprequest;

import java.util.List;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class ProdutoAdapter extends BaseAdapter{

private List<Produto> produtos;
private LayoutInflater mInflater;
private ViewHolder holder;


static class ViewHolder{
private TextView tvCodigo;
private TextView tvNome;
private TextView tvValor;
private ImageView img;
}


public ProdutoAdapter(Context context, List<Produto> produtos) {
mInflater = LayoutInflater.from(context);
this.produtos = produtos;
}

public int getCount() {
return produtos.size();
}


public Object getItem(int index) {
return produtos.get(index);
}


public long getItemId(int index) {
return index;
}


public View getView(int posicao, View convertView, ViewGroup arg2) {

if (convertView == null) {


convertView = mInflater.inflate(R.layout.produto_adapter_item, null);
holder = new ViewHolder();

holder.tvCodigo = (TextView) convertView.findViewById(R.id.txtCodigo);
holder.tvNome = (TextView) convertView.findViewById(R.id.txtNome);
holder.tvValor = (TextView) convertView.findViewById(R.id.txtValor);
holder.img = (ImageView) convertView.findViewById(R.id.img);

convertView.setTag(holder);

} else {
holder = (ViewHolder) convertView.getTag();
}


Produto p = produtos.get(posicao);

holder.tvCodigo.setText(p.getCodigo());
holder.tvNome.setText(p.getNome());
holder.tvValor.setText(p.getValor());
holder.img.setImageResource(p.getImgRes());

return convertView;
}


}

Então, consegui fazer ele entrar no evento click, porém dá um erro: "Sorry! The application Change numbers (process com.hamdyghanem.httprequest) has stopped unexpectedly. Please try again."

No evento click ficou assim:

Em anexo estou colocando o Log de erro qdo executa o click com os 3 principais arquivos.. Menu.java, Produtos.java e ProdutosAdapter.java

Aguardo aqui na esperança



Em terça-feira, 11 de setembro de 2012 09h45min16s UTC-3, Clebão escreveu:
Dentro do lv.setOnItemClickListener existe o metodo public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {}

Note que exite 4 parâmetros, o primeiro é o Adapter, o segundo é a view, o terceiro a posição do que foi clicado e o quarto é o id.

Não sei como foi construído o seu ProdutoAdapter, é basiscamente realizar um cast + ou - assim   
Produto prod =   (Produto) arg0.get(arg2);

Mas para isso vai depender de como seu ProdutoAdapterfoi construido.

Em 10 de setembro de 2012 23:49, Murilo Ângelo <muriloangelo10@gmail.com> escreveu:
posta o log cara, passei por um problema exatamente igual, mas como vc esta dizendo que nem no evento entra, precisaremos de mais informações


2012/9/10 Roversi <matheusroversi@gmail.com>
Pessoal estou com dificuldades em pegar o id de um item de um ListView, criei uma função onde carrega uma um listview com produtos do banco de dados, porém não estou conseguindo fazer o click do listview pegar a id, nem entrar no evento.. alguém sabe me dizer onde estou errando?



// FUNÇÃO
public void CarregandoProdutos(int Categoria){
//Cria Array para criar a Lista de produtos e categorias
List<Produto> produtos = new ArrayList<Produto>();
Resources r = getResources();
//Carrega lista de produtos
    cursor = mySQLiteAdapter.queryProdutos(Categoria);  
        //String[] from2 = new String[]{SQLiteAdapter.KEY_ID, SQLiteAdapter.KEY_CONTENT1, SQLiteAdapter.KEY_CONTENT2};
        cursor.moveToFirst();
        while(!cursor.isAfterLast()) {
        //Log.i("", cursor.getString(0)+"/"+cursor.getString(1)+"/"+cursor.getString(2));
        int resId = r.getIdentifier("prato"+cursor.getString(0),"drawable", getPackageName());
        produtos.add(new Produto(cursor.getString(0), cursor.getString(1), resId, cursor.getString(2)));
          cursor.moveToNext();
        }
        cursor.close();
ProdutoAdapter adapter = new ProdutoAdapter(getApplicationContext(),produtos);
//Amarra um objeto ListView com o ListView declarado no XML.
ListView lv = (ListView) findViewById(R.id.Lista);
lv.setAdapter(adapter);
                Log.i("onitemclicklistener","inicio");
                lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Log.i("listview","click");
}});
        Log.i("onitemclicklistener","fim");
}


  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário