How to pass information from the listview to a new activity?

4

I have a schedule of events where I live I can already receive through my database in Mysql and JSON a list with the titles of the events. Now I wanted it when I clicked on the event to redirect to an activity with event info, but I do not know how to do that. Could you give me some help I'm new to android.

My code:

package com.eu.agendamarinhagrande;

import android.annotation.TargetApi;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Build;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

import com.eu.agendamarinhagrande.JSONParser;
import com.eu.agendamarinhagrande.R;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.text.Normalizer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Pattern;


public class MainActivity extends ActionBarActivity {

    // Progress Dialog
    private ProgressDialog pDialog;

    // Creating JSON Parser object
    // JSONParser jParser = new JSONParser();

    ArrayList<HashMap<String, String>> empresaList;


    // url to get all products list
    private static String url_all_empresas = "http://www.grifin.pt/projectoamg/Conexao.php";

    // JSON Node names


    private static final String TAG_TITULO = "Titulo";


    // products JSONArray
    String resultado = null;

    ListView lista;

    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Hashmap para el ListView
        empresaList = new ArrayList<HashMap<String, String>>();
        new Download().execute();
        // Cargar los productos en el Background Thread

        lista = (ListView) findViewById(R.id.listView);

        // ActionBar actionBar = getSupportActionBar();
        // actionBar.setDisplayHomeAsUpEnabled(true);

    }//fin onCreate


    public class Download extends AsyncTask<Void, Void, String> {

        @Override
        protected String doInBackground(Void... params) {
            String out = null;

            try {
                DefaultHttpClient httpClient = new DefaultHttpClient();

                final HttpParams httpParameters = httpClient.getParams();

                HttpConnectionParams.setConnectionTimeout(httpParameters, 15000);
                HttpConnectionParams.setSoTimeout(httpParameters, 15000);

                HttpGet httpPost = new HttpGet(url_all_empresas);

                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();

                out = EntityUtils.toString(httpEntity, HTTP.UTF_8);

            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            return out;
        }


        @TargetApi(Build.VERSION_CODES.GINGERBREAD)
        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);

            ArrayList<String> list = new ArrayList<>();

            try {
                JSONArray jsonArray = new JSONArray(result);
                for (int i = 0; i < jsonArray.length(); i++) {
                    JSONObject jsa = jsonArray.getJSONObject(i);
                    String str = jsa.getString("Titulo");
                    String data = jsa.getString("Datainicio");
                    Log.e("TAG", str);
                    Log.e("TAG", data);


                    String s1 = Normalizer.normalize(str, Normalizer.Form.NFKD);
                    String regex = Pattern.quote("[\p{InCombiningDiacriticalMarks}\p{IsLm}\p{IsSk}]+");

                    str = new String(s1.replaceAll(regex, "").getBytes("ascii"), "ascii");

                    list.add(str+"\n"+data);

                }

                ArrayAdapter adapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1, list);

                // updating listview
                //setListAdapter(adapter);
                lista.setAdapter(adapter);

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
    
asked by anonymous 22.06.2015 / 11:02

1 answer

3

First, if you intend to pass objects that you created between Activities , you need to implement it as Parcelable or Serializable .

Implementing your class as Parcelable or Serializable , means that you can serialize this object, that is, write the values and structure of an object in metadata so that you can transfer it between Activity to another, which, in turn, needs to deserialize this object and use it properly.

An example of a class in Parcelable :

public class Exemplo implements Parcelable {

    private String stringExemplo;
    private int intExemplo;
    private boolean booleanExemplo;

    public String getStringExemplo() {
        return stringExemplo;
    }

    public void setStringExemplo(String stringExemplo) {
        this.stringExemplo = stringExemplo;
    }

    public int getIntExemplo() {
        return intExemplo;
    }

    public void setIntExemplo(int intExemplo) {
        this.intExemplo = intExemplo;
    }

    public boolean isBooleanExemplo() {
        return booleanExemplo;
    }

    public void setBooleanExemplo(boolean booleanExemplo) {
        this.booleanExemplo = booleanExemplo;
    }


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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(this.stringExemplo);
        dest.writeInt(this.intExemplo);
        dest.writeByte(booleanExemplo ? (byte) 1 : (byte) 0);
    }

    public Exemplo() {
    }

    protected Exemplo(Parcel in) {
        this.stringExemplo = in.readString();
        this.intExemplo = in.readInt();
        this.booleanExemplo = in.readByte() != 0;
    }

    public static final Parcelable.Creator<Exemplo> CREATOR = new Parcelable.Creator<Exemplo>() {
        public Exemplo createFromParcel(Parcel source) {
            return new Exemplo(source);
        }

        public Exemplo[] newArray(int size) {
            return new Exemplo[size];
        }
    };
}

Example of a class with Serializable :

public class Exemplo implements Serializable {

    private static final long serialVersionUID = 1L;

    private String stringExemplo;
    private int intExemplo;
    private boolean booleanExemplo;

    public String getStringExemplo() {
        return stringExemplo;
    }

    public void setStringExemplo(String stringExemplo) {
        this.stringExemplo = stringExemplo;
    }

    public int getIntExemplo() {
        return intExemplo;
    }

    public void setIntExemplo(int intExemplo) {
        this.intExemplo = intExemplo;
    }

    public boolean isBooleanExemplo() {
        return booleanExemplo;
    }

    public void setBooleanExemplo(boolean booleanExemplo) {
        this.booleanExemplo = booleanExemplo;
    }
}

Now that you have a serializable object, you need to catch it in onItemClickListener() of your ListView :

lista = (ListView) findViewById(R.id.listView);
lista.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
        //Capturando o objeto associado ao item da lista
        Exemplo objetoExemplo = (Exemplo) adapterView.getAdapter().getItem(position);

        //Caso você queira passar tipos primitivos
        String stringExemplo = "Algum texto";
        int intExemplo = 1;
        boolean booleanExemplo = true;

        Intent intent = new Intent(SuaActivity.this, SuaOutraActivity.class);

        //O primeiro parametro é o nome deste extra a ser capturado na sua outra Activity
        intent.putExtra("objeto_extra", objetoExemplo);
        intent.putExtra("string_extra", stringExemplo);
        intent.putExtra("int_extra", intExemplo);
        intent.putExtra("boolean_extra", booleanExemplo);
        startActivity(intent);

    }
});

To capture in your other Activity :

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (getIntent().getExtras() != null) {

        if (getIntent().hasExtra("extra_objeto")) {
            Exemplo exemplo = getIntent().getExtras().getParcelable("extra_objeto");
        }

        if (getIntent().hasExtra("string_extra")) {
            String strintExemplo = getIntent().getExtras().getString("string_extra");
        }

        if (getIntent().hasExtra("int_extra")) {
            int teste = getIntent().getExtras().getInt("int_extra");
        }

        if (getIntent().hasExtra("boolean_extra")) {
            boolean booleanExemplo = getIntent().getExtras().getBoolean("boolean_extra");
        }

    }
}
    
22.06.2015 / 16:02