I have an Activity where I call another Activity using startActivityForResult
.
In the Activity that was called, I have a list filled by products already registered.
In that list, you needed to click on any of the products in the list to return the product to the previous Activity.
The problem is that when I click on the list item, I can not retrieve it and return it as a result to the previous Activity.
//Classe CadPreVenda.Java
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item){
switch (item.getItemId()) {
case ADICIONAR:
Toast.makeText(CadPreVenda.this, "Clicou em ADD", Toast.LENGTH_LONG).show();
Log.d(TAG,"Log: Clicou em add");
Intent i = new Intent(CadPreVenda.this, pvConsProduto.class);
startActivityForResult(i, 1);
return true;
case CANCELAR:
Toast.makeText(CadPreVenda.this, "Clicou em CANCELAR", Toast.LENGTH_LONG).show();
Log.d(TAG,"Log: Clicou em CANCELAR");
return true;
case SALVAR:
Toast.makeText(CadPreVenda.this, "Clicou em SALVAR", Toast.LENGTH_LONG).show();
Log.d(TAG,"Log: CLICOU EM SALVAR");
return true;
}
return false;
}
//verifica se usuário confirmou a inclusão de algum item
public void onActivityResult(int requestCode, int resultCode, Intent it) {
if(it == null){
Context contexto = getApplicationContext();
int duracao = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(contexto, "Atenção! Produto não incluído!",duracao);
toast.show();
Log.d(TAG, "Cancelou o processo.");
Log.d(TAG, "Erro: Processo Abortado." );
}
else{
Bundle params = it !=null ? it.getExtras(): null;
if (params != null){
String produto = params.getString("produto");
Log.d(TAG, "Produto Add: "+produto);
}
}
In this class, I load the product list and try to return the return to the previous Activity.
package br.sysandroid;
import java.util.List;
import br.sysandroid.dao.Lcm001DAO;
import br.sysandroid.dao.ProdutoAdapter;
import br.sysandroid.dao.banco.BancoDAO;
import br.sysandroid.model.LCM001;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
public class pvConsProduto extends ListActivity{
Button btPesquisar, btSair;
private Lcm001DAO ProdutoDAO;
List<LCM001> produtos;
ProdutoAdapter adapter;
BancoDAO bancoDAO;
public static final String TAG = "LOGVENDAS";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.consproduto);
bancoDAO = new BancoDAO(this);
//Código que não é relevante para o problema
@Override
protected void onListItemClick(ListView list, View v, int position, long id) {
super.onListItemClick(list, v, position, id);
try {
Intent it = new Intent();
it.putExtra("produto",produtos.get(position));
Log.d(TAG, "Adicionando produto: "+produtos.get(position));
setResult(RESULT_OK,it);
finish();
} catch (Exception e) {
e.printStackTrace();
Log.d(TAG, "Algum erro aconteceu");
}
}
@Override
protected void onResume() {
ProdutoDAO = new Lcm001DAO(this);
ProdutoDAO.open();
//Lê produtos do banco
produtos = ProdutoDAO.lerProdutos();
//seta produtos na lista
ListView listaProduto = (ListView) findViewById(android.R.id.list);
//ListView listaProduto = getListView();
adapter = new ProdutoAdapter(this, produtos);
listaProduto.setAdapter(adapter);
super.onResume();
}
}
When I click on any of the items in the list, Log I get this:
10-31 09:08:47.002: D/LOGVENDAS(1663): Adicionando produto: br.sysandroid.model.LCM001@b2e9e0a8
10-31 09:08:47.212: D/GRAVANDOLOGS(1663): Produto Add: null
And it generates this warn in LogCat:
10-31 09:08:37.232: W/Bundle(1663): Key produto expected String but value was a br.sysandroid.model.LCM001. The default value <null> was returned.
10-31 09:08:37.322: W/Bundle(1663): Attempt to cast generated internal exception:
10-31 09:08:37.322: W/Bundle(1663): java.lang.ClassCastException: br.sysandroid.model.LCM001 cannot be cast to java.lang.String
10-31 09:08:37.322: W/Bundle(1663): at android.os.Bundle.getString(Bundle.java:1121)
10-31 09:08:37.322: W/Bundle(1663): at br.sysandroid.CadPreVenda.onActivityResult(CadPreVenda.java:107)
10-31 09:08:37.322: W/Bundle(1663): at android.app.Activity.dispatchActivityResult(Activity.java:5423)
10-31 09:08:37.322: W/Bundle(1663): at android.app.ActivityThread.deliverResults(ActivityThread.java:3361)
10-31 09:08:37.322: W/Bundle(1663): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3408)
10-31 09:08:37.322: W/Bundle(1663): at android.app.ActivityThread.access$1300(ActivityThread.java:135)
10-31 09:08:37.322: W/Bundle(1663): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1244)
10-31 09:08:37.322: W/Bundle(1663): at android.os.Handler.dispatchMessage(Handler.java:102)
10-31 09:08:37.322: W/Bundle(1663): at android.os.Looper.loop(Looper.java:136)
10-31 09:08:37.322: W/Bundle(1663): at android.app.ActivityThread.main(ActivityThread.java:5017)
10-31 09:08:37.322: W/Bundle(1663): at java.lang.reflect.Method.invokeNative(Native Method)
10-31 09:08:37.322: W/Bundle(1663): at java.lang.reflect.Method.invoke(Method.java:515)
10-31 09:08:37.322: W/Bundle(1663): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
10-31 09:08:37.322: W/Bundle(1663): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
10-31 09:08:37.322: W/Bundle(1663): at dalvik.system.NativeStart.main(Native Method)