我需要你的帮助来解决我与活动有关的以下问题。
活动具有显示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);
}
}
}
当用户从第二个活动(详细视图)返回时,我如何刷新第一个活动(列表视图)的投票数
答案 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()
此外,这是一个非常有用的视频