从另一个活动重新打开活动时,在列表视图中刷新值

时间:2014-04-19 03:06:24

标签: android android-listview android-asynctask

我需要你的帮助来解决我与活动有关的以下问题。

活动具有显示JSON对象的列表视图。当用户点击一行时,会打开另一个活动,显示有关所选对象的更多详细信息。在该第二活动上,用户可以点击按钮以向上投票该对象。然后将投票数量增加一个。然后,如果用户返回上一个活动,则显示的给定投票数量不会更新,但应考虑用户给出的投票进行更新。

在第一个活动(列表视图)中,投票数字段是通过意图从先前的活动中给出的:

第一个活动代码(清单):

import java.util.ArrayList;
import java.util.HashMap;

import android.content.Context;
import android.content.Intent;
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 Empresas_ListViewAdapter extends BaseAdapter {

    // Declare Variables
    Context context;
    LayoutInflater inflater;
    ArrayList<HashMap<String, String>> data;
    ImageLoader imageLoader;
    HashMap<String, String> resultp = new HashMap<String, String>();

    public Empresas_ListViewAdapter(Context context,
            ArrayList<HashMap<String, String>> arraylist) {
        this.context = context;
        data = arraylist;
        imageLoader = new ImageLoader(context);
    }

    @Override
    public int getCount() {
        return data.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    public View getView(final int position, View convertView, ViewGroup parent) {
        // Declare Variables
        TextView valoracionEmpresa;
        TextView nombreEmpresa;
        TextView direccionEmpresa;
        ImageView strImagen;
        TextView descripcionEmpresa;
        TextView telefonoEmpresa;
        TextView facebookEmpresa;
        TextView emailEmpresa;
        TextView textoOferta;
        TextView horarioEmpresa;
        TextView latitudEmpresa;
        TextView longitudEmpresa;
        TextView idEmpresa;


        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View itemView = inflater.inflate(R.layout.empresas_listview_item, parent, false);
        // Get the position
        resultp = data.get(position);

        // Locate the TextViews in listview_item.xml
        valoracionEmpresa = (TextView) itemView.findViewById(R.id.valoracionEmpresa);
        nombreEmpresa = (TextView) itemView.findViewById(R.id.nombreEmpresa);
        direccionEmpresa = (TextView) itemView.findViewById(R.id.direccionEmpresa);

        // Locate the ImageView in listview_item.xml
        strImagen = (ImageView) itemView.findViewById(R.id.strImagen);

        // Capture position and set results to the TextViews
        valoracionEmpresa.setText(resultp.get(Empresas_MainActivity.VALORACIONEMPRESA));
        nombreEmpresa.setText(resultp.get(Empresas_MainActivity.NOMBREEMPRESA));
        direccionEmpresa.setText(resultp.get(Empresas_MainActivity.DIRECCIONEMPRESA));
        // Capture position and set results to the ImageView
        // Passes flag images URL into ImageLoader.class
        imageLoader.DisplayImage(resultp.get(Empresas_MainActivity.STRIMAGEN), strImagen);
        // Capture ListView item click
        itemView.setOnClickListener(new OnClickListener() {


            @Override
            public void onClick(View arg0) {
                // Get the position
                resultp = data.get(position);
                Intent intent = new Intent(context, Empresas_SingleItemView.class);

                // Pass all data rank
                intent.putExtra("valoracionEmpresa", resultp.get(Empresas_MainActivity.VALORACIONEMPRESA));

                // Pass all data country
                intent.putExtra("nombreEmpresa", resultp.get(Empresas_MainActivity.NOMBREEMPRESA));
                // Pass all data population
                intent.putExtra("direccionEmpresa",resultp.get(Empresas_MainActivity.DIRECCIONEMPRESA));
                // Pass all data flag
                intent.putExtra("strImagen", resultp.get(Empresas_MainActivity.STRIMAGEN));

                intent.putExtra("descripcionEmpresa",resultp.get(Empresas_MainActivity.DESCRIPCIONEMPRESA));
                intent.putExtra("telefonoEmpresa",resultp.get(Empresas_MainActivity.TELEFONOEMPRESA));
                intent.putExtra("facebookEmpresa",resultp.get(Empresas_MainActivity.FACEBOOKEMPRESA));
                intent.putExtra("emailEmpresa",resultp.get(Empresas_MainActivity.EMAILEMPRESA));
                intent.putExtra("textoOferta",resultp.get(Empresas_MainActivity.TEXTOOFERTA));
                intent.putExtra("horarioEmpresa",resultp.get(Empresas_MainActivity.HORARIOEMPRESA));
                intent.putExtra("latitudEmpresa",resultp.get(Empresas_MainActivity.LATITUDEMPRESA));
                intent.putExtra("longitudEmpresa",resultp.get(Empresas_MainActivity.LONGITUDEMPRESA));
                intent.putExtra("idEmpresa",resultp.get(Empresas_MainActivity.IDEMPRESA));




                // Start SingleItemView Class
                context.startActivity(intent);


            }
        });
        return itemView;
    }
}

第二个活动代码(细节)

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.ByteArrayBuffer;

import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

public class Empresas_SingleItemView extends Activity {
    // Declare Variables
    String valoracionEmpresa;
    String nombreEmpresa;
    String direccionEmpresa;
    String descripcionEmpresa;
    String telefonoEmpresa;
    String facebookEmpresa;
    String emailEmpresa;
    String textoOferta;
    String horarioEmpresa;
    String latitudEmpresa;
    String longitudEmpresa; 
    String imagenstrImagen;
    String idEmpresa;
    String position;
    private ProgressBar pb;
     URL aURL;
        /* Will be filled and displayed later. */
        String aString = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Get the view from singleitemview.xml
        ImageLoader imageLoader = new ImageLoader(this);
        setContentView(R.layout.empresas_singleitemview);


        Intent i = getIntent();
        // Get the result of rank
        valoracionEmpresa = i.getStringExtra("valoracionEmpresa");


        // Get the result of country
        nombreEmpresa = i.getStringExtra("nombreEmpresa");


        // Get the result of population
        direccionEmpresa = i.getStringExtra("direccionEmpresa");

        descripcionEmpresa = i.getStringExtra("descripcionEmpresa");
        telefonoEmpresa = i.getStringExtra("telefonoEmpresa");
        facebookEmpresa = i.getStringExtra("facebookEmpresa");
        emailEmpresa = i.getStringExtra("emailEmpresa");
        textoOferta = i.getStringExtra("textoOferta");
        horarioEmpresa = i.getStringExtra("horarioEmpresa");
        latitudEmpresa = i.getStringExtra("latitudEmpresa");
        longitudEmpresa = i.getStringExtra("longitudEmpresa");
        idEmpresa = i.getStringExtra("idEmpresa");

        // Get the result of flag
        imagenstrImagen = i.getStringExtra("strImagen");


        // Locate the TextViews in singleitemview.xml
        TextView txtvaloracionempresa = (TextView) findViewById(R.id.valoracionEmpresa);
        TextView txtnombreempresa = (TextView) findViewById(R.id.nombreEmpresa);
        TextView txtdireccionempresa = (TextView) findViewById(R.id.direccionEmpresa);
        TextView txtdescripcionempresa = (TextView) findViewById(R.id.descripcionEmpresa);
        TextView txtofertaempresa = (TextView) findViewById(R.id.textoOferta);
        TextView txthorarioempresa = (TextView) findViewById(R.id.horarioEmpresa);


        // Locate the ImageView in singleitemview.xml
        ImageView imagenEmpresa = (ImageView) findViewById(R.id.strImagen);

        // Set results to the TextViews
        txtvaloracionempresa.setText(valoracionEmpresa);
        txtnombreempresa.setText(nombreEmpresa);
        txtdireccionempresa.setText(direccionEmpresa);
        txtdescripcionempresa.setText(descripcionEmpresa);
        txtofertaempresa.setText(textoOferta);
        txthorarioempresa.setText(horarioEmpresa);

        // Capture position and set results to the ImageView
        // Passes flag images URL into ImageLoader.class
        imageLoader.DisplayImage(imagenstrImagen, imagenEmpresa);
    }

    public void openFacebook(View view) 
    {
        String url = "http://es-es.facebook.com/pages/"+facebookEmpresa;
        Intent i = new Intent(Intent.ACTION_VIEW);
        i.setData(Uri.parse(url));
        startActivity(i);


    }
    public void openEmail(View view) 
    {
        Intent i = new Intent(Intent.ACTION_SEND);
        i.setType("message/rfc822");
        i.putExtra(Intent.EXTRA_EMAIL  , new String[]{emailEmpresa});
        i.putExtra(Intent.EXTRA_SUBJECT, "Email desde Vive Gran Canaria App");
        i.putExtra(Intent.EXTRA_TEXT   , "Escribe aqui el texto de tu mensaje");
        try {
            startActivity(Intent.createChooser(i, "Send mail..."));
        } catch (android.content.ActivityNotFoundException ex) {
            Toast.makeText(Empresas_SingleItemView.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
        }
    }
    public void openLlamar(View view) 
    {
         try {
                Intent callIntent = new Intent(Intent.ACTION_CALL);
                callIntent.setData(Uri.parse("tel:"+telefonoEmpresa));
                startActivity(callIntent);
            } catch (ActivityNotFoundException e) {
                Log.e("helloandroid dialing example", "Call failed", e);
            }
    }
    public void openVotar(View view)
    {
        Log.i("Response", "Hemos entrado en openVotar: ");
        ConnectionTask task = new ConnectionTask();
        String[] params = new String[2];
        String url = "http://XXXXX/cambiarvaloracionempresa.php?id="+idEmpresa;
        params[0] = url;
        //params[1] = somethingelseifneeded;
        task.execute(params);   }
    private class ConnectionTask extends AsyncTask<String, Void, String>{
        @Override
        protected String doInBackground(String... urls) {
             URL aURL;
                /* Will be filled and displayed later. */
                String aString = null;
                try {
        aURL = new URL(
                urls[0]);

        /* Open a connection to that URL. */
        final HttpURLConnection aHttpURLConnection = (HttpURLConnection) aURL.openConnection();

        /* Define InputStreams to read from the URLConnection. */
        InputStream aInputStream = aHttpURLConnection.getInputStream();
        BufferedInputStream aBufferedInputStream = new BufferedInputStream(
                aInputStream);

        /* Read bytes to the Buffer until there is nothing more to read(-1) */
        ByteArrayBuffer aByteArrayBuffer = new ByteArrayBuffer(50);
        int current = 0;
        while ((current = aBufferedInputStream.read()) != -1) {
            aByteArrayBuffer.append((byte) current);
        }


        /* Convert the Bytes read to a String. */
        aString = new String(aByteArrayBuffer.toByteArray());               } catch (IOException e) {
                   // Log.d(TAG, e.toString());
                }
            return aString;
        }

        @Override
        protected void onPostExecute(String result) {
                   TextView aTextView;Log.i("Response JSON", result);
                   TextView txtvaloracionempresa = (TextView) findViewById(R.id.valoracionEmpresa);
                txtvaloracionempresa.setText(result);

    // result is what you got from your connection
    //aTextView.setText(result);

        }

    }

}

当用户从第二个活动(详细视图)返回时,我如何刷新第一个活动(列表视图)的投票数

1 个答案:

答案 0 :(得分:1)

您需要在适配器上调用notifyDataSetChanged()才能刷新列表视图。

每次更改datset后都应调用

adapter.notifyDataSetChanged()。 如果你是在说for for循环

for (int i = ; ; ){
…
…
adapter.addItem(item);
adapter.notifyDataSetChanged();
}

否则你可以在循环后调用它。

此外,应该从UI线程

调用notifyDataSetChanged()

查看http://developer.android.com/reference/android/widget/BaseAdapter.html#notifyDataSetChanged()

此外,这是一个非常有用的视频

https://www.youtube.com/watch?v=wDBM6wVEO70&t=17m38s