How to retrieve the id of a product by clicking on the listview opening another activity

3

I'm making an application for querying products using a WebService.

I search the WS and bring the product information I need. Then I pass this information to a Adapter create ListView and then in this step Adapter in Activity where I show the products registered.

My question is: how do I do it so that when I click on the product I open the details of it in another Activity ? I need to pass the product's PK parameter to load the details of that product.

I have tried the following codes:

public void onItemClick(AdapterView<?> av, View v, int position, long id) {    
    int posicao = resultado.getSelectedItemPosition();
    intent  = new Intent(this, MostrarItemSelActivity.class);
    intent.putExtra("codigo",posicao);
    startActivity(intent);
    this.finish();
}

However, in this way, I retrieve the position of the item that I clicked inside ListView I can not get the inside information inside that item like code, value, description etc.

Thank you in advance.

    
asked by anonymous 28.05.2016 / 21:31

3 answers

0

There are some ways to "talk" between Activities, to simply send some information to another activity, you can use the Bundle.

I believe this is answered in this another question

    
29.05.2016 / 02:14
0

I did not understand the question very well, but first of all I advise you strongly to use a RecyclerView instead of a ListView. link

You have an ArrayList of Product objects and you passed it as a parameter of the ListView Adapter, so you just have to do something like: Produto produto = resultado.get(position) , considering that the result is an ArrayList containing Product instances . The intent is going to change a bit, because now you need to pass an object as a parameter, I recommend reading: link

    
29.05.2016 / 23:18
0

You can use Parcelable or Serializable .

Parcelable Example

package com.helpme.app;

import android.os.Parcel;
import android.os.Parcelable;

public class Produto implements Parcelable {

 int codigo;
 String nome;

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

 public int getCodigo() {
     return codigo;
 }

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

 public String getNome() {
     return nome;
 }

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

 // PARCELABLE
 protected Produto(Parcel in) {
     setCodigo(in.readInt());
     setNome(in.readString());
 }

 public static final Creator<Produto> CREATOR = new Creator<Produto>() {
     @Override
     public Produto createFromParcel(Parcel in) {
         return new Produto(in);
     }

     @Override
     public Produto[] newArray(int size) {
         return new Produto[size];
     }
 };

 @Override
 public int describeContents() {
     return 0;
 }

 @Override
 public void writeToParcel(Parcel dest, int flags) {
     dest.writeInt(getCodigo());
     dest.writeString(getNome());
 }
}

Passing data via Intent

Produto produto = new Produto(1, "SmartPhone");
Intent it = new Intent(this, MostrarItemSelActivity.class);
it.putExtra("produto", produto);
startActivity(it);

Receiving the data ("DisplayItemActivity" screen)

Produto produto = getIntent().getExtras().getParcelable("produto");

Serializable Example

package com.helpme.app;

import java.io.Serializable;

public class Produto implements Serializable {

  int codigo;
  String nome;

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

  public int getCodigo() {
      return codigo;
  }

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

  public String getNome() {
      return nome;
  }

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

ArrayList<Produto> produtos = new ArrayList<>();
produtos.add(new Produto(1, "SmartPhone"));
produtos.add(new Produto(2, "TV 42"));

Intent it = new Intent(this, MostrarItemSelActivity.class);
// Se quiser passar a lista inteira
it.putExtra("produtos", produtos); 
// Se quiser passar apenas um objeto
it.putExtra("produto", produtos.get(0)); 
startActivity(it);

Retrieving the data

Produto produto = (Produto) getIntent().getSerializableExtra("produto");

ArrayList<Produto> produtos = (ArrayList<Produto>) getIntent().getSerializableExtra("produtos");

System.out.println("Produto: "+ produto.getNome());
System.out.println("Produtos: "+ produtos.get(0).getNome());

I advise you to use RecyclerView instead of ListView

    
30.05.2016 / 17:28