我遇到了一个自定义BaseAdapter的问题,它在PullToRefreshListView中显示(whitch是ListView的扩展,您可以通过拉动列表来更新)。
我的问题是,当我最小化并且稍后我恢复我的应用程序时,ListView没有显示任何内容...我在我的最后一行代码中有一个断点,我的方法getCount从我的适配器返回总是大于零,但是getView仍未被调用...
适配器:
package extrasoftware.triptreat.Adapters;
/**
* Creado pormsolla on 7/01/14.
*/
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Point;
import android.view.Display;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.GregorianCalendar;
import extrasoftware.triptreat.Clases.ImageLoader;
import extrasoftware.triptreat.Clases.ImageViewEscalable;
import extrasoftware.triptreat.Clases.Ofertas.Oferta;
import extrasoftware.triptreat.Clases.Ofertas.OfertasLlenar_R;
import extrasoftware.triptreat.Comun.Constantes;
import extrasoftware.triptreat.Comun.Datos;
import extrasoftware.triptreat.Comun.General;
import extrasoftware.triptreat.OfertasActivity;
import extrasoftware.triptreat.OfertasDetalleActivity;
import extrasoftware.triptreat.R;
public class OfertasAdapter extends BaseAdapter {
private Activity activity;
private OfertasLlenar_R oRespuesta;
private OfertasLlenar_R oRespuestaTotal;
private static LayoutInflater inflater = null;
private ImageLoader imageLoader;
public static boolean abrirVentana = true;
//public static boolean okComentario = true;
public OfertasAdapter(Activity a, OfertasLlenar_R d, OfertasLlenar_R d_total) {
activity = a;
oRespuesta = d;
oRespuestaTotal = d_total;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
Display display = activity.getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
imageLoader = new ImageLoader(activity.getApplicationContext(), R.drawable.sinimagen, Constantes.ImageLoaderTipo.Lista);
}
public int getCount() {
return oRespuesta.datos.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
View vista = convertView;
try{
vista = inflater.inflate(R.layout.ofertas_row, parent, false);
final Oferta oferta = oRespuesta.datos.get(position);
final TextView txtTitulo = (TextView)vista.findViewById(R.id.txtTitulo);
final TextView txtNegocio = (TextView)vista.findViewById(R.id.txtNegocio);
final ImageViewEscalable imgOferta = (ImageViewEscalable)vista.findViewById(R.id.imgOferta);
final ImageView imgEstado = (ImageView)vista.findViewById(R.id.imgEstado);
imgOferta.setImageBitmap(null);
String urlImagen = General.ObtenerRutaImagen(Constantes.Ventanas_Origen.Ofertas, oRespuesta.oferta_raiz + "/" + oferta.oferta_imagen, activity);
imageLoader.DisplayImage(urlImagen, imgOferta);
txtNegocio.setText(oferta.negocio_nombre);
txtTitulo.setText(oferta.titulo);
GregorianCalendar calendar = new GregorianCalendar();
final boolean caducada = calendar.getTime().after(oferta.valido_hasta_F);
if(caducada){
imgEstado.setImageResource(R.drawable.caducada);
}
else if(oferta.estado == Constantes.Ofertas_Estados.Aceptada){
imgEstado.setImageResource(R.drawable.aceptada);
}
else if(oferta.estado == Constantes.Ofertas_Estados.Usada){
imgEstado.setImageResource(R.drawable.usada);
}
else{
imgEstado.setVisibility(View.GONE);
}
vista.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(final View v) {
final CharSequence[]
options = {
activity.getResources().getString(R.string.borrar),
activity.getResources().getString(R.string.excluir),
activity.getResources().getString(R.string.cancelar)
};
AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());
builder.setItems(options, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
if (options[item].equals(activity.getResources().getString(R.string.borrar))) {
OfertasActivity.ConfirmarBorrar(v, oferta.oferta_id);
}
else if (options[item].equals(activity.getResources().getString(R.string.excluir))) {
OfertasActivity.ConfirmarExcluir(v, oferta.negocio_id, oferta.negocio_nombre);
}
else if (options[item].equals(activity.getResources().getString(R.string.cancelar))) {
dialog.dismiss();
}
}
});
builder.show();
return true;
}
});
// Click event for single list row
vista.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try{
if(abrirVentana && !caducada){
abrirVentana = false;
General.MostrarCargando(activity);
Datos.setCodigosFiltrados(activity.getApplicationContext(), oRespuesta);
Intent detalleIntent = new Intent(activity.getApplicationContext(), OfertasDetalleActivity.class);
detalleIntent.putExtra(Constantes.Parametros_Extra.Indice, String.valueOf(General.ObtenerIndiceOfertaEnLista(oRespuesta.datos, oferta.oferta_id)));
activity.startActivity(detalleIntent);
}
}
catch (Exception e){
e.printStackTrace();
}
}
});
}
catch(Exception e){
e.printStackTrace();
}
return vista;
}
public void setDatos(OfertasLlenar_R oRespuestaFiltro){
oRespuesta = oRespuestaFiltro;
this.notifyDataSetChanged();
}
}
谢谢!
答案 0 :(得分:0)
我刚刚在使用此适配器的活动中发现错误...但我不明白这一点,我不确定它是更好的解决方案...... 这个方法就是问题:
private static void CargarListasOfertas(OfertasLlenar_R oRespuesta){
try{
OfertasLlenar_R oRespuestFiltradas = (OfertasLlenar_R) oRespuesta.clone();
if(m_listaNavegaciones != null && m_listaNavegaciones.size() != 0){
final short paisID = m_listaNavegaciones.get(m_indice_actual).pais_id;
final short ciudadID = m_listaNavegaciones.get(m_indice_actual).ciudad_id;
Predicate<Oferta> ofertasPredicate = new Predicate<Oferta>() {
public boolean apply(Oferta oferta) {
return oferta.pais_id == paisID && oferta.ciudad_id == ciudadID;
}
};
Collection<Oferta> ofertas = General.Filtrar(oRespuestFiltradas.datos, ofertasPredicate);
oRespuestFiltradas.datos = new ArrayList<Oferta>(ofertas);
if(adapterOfertas == null){
adapterOfertas = new OfertasAdapter(activity, oRespuestFiltradas, oRespuesta);
lstOfertas.setAdapter(adapterOfertas);
}
else{
adapterOfertas.setDatos(oRespuestFiltradas);
}
}
else{
oRespuestFiltradas.datos = new ArrayList<Oferta>();
if(adapterOfertas == null){
adapterOfertas = new OfertasAdapter(activity, oRespuestFiltradas, oRespuesta);
lstOfertas.setAdapter(adapterOfertas);
}
else{
adapterOfertas.setDatos(oRespuestFiltradas);
}
oRespuestFiltradas.datos = new ArrayList<Oferta>();
}
final long ONE_MINUTE_IN_MILLIS = 60000;//millisecs
long t = Calendar.getInstance().getTime().getTime();
Date afterAddingTenMins = new Date(t + (10 * ONE_MINUTE_IN_MILLIS));
if(Datos.ventana_origen != Constantes.Ventanas_Origen.OfertasDetalle
|| (OfertasDetalleActivity.getFechaCarga() != null
&& !OfertasDetalleActivity.getFechaCarga().before(afterAddingTenMins))){
m_posicionOfertas = lstOfertas.getRefreshableView().getFirstVisiblePosition();
}
if(m_posicionOfertas != -1){
lstOfertas.getRefreshableView().setSelection(m_posicionOfertas);
}
General.OcultarCargando();
}
catch (Exception e){
e.printStackTrace();
General.OcultarCargando();
}
}
现在正常运行的代码是:
private static void CargarListasOfertas(OfertasLlenar_R oRespuesta){
try{
OfertasLlenar_R oRespuestFiltradas = (OfertasLlenar_R) oRespuesta.clone();
if(m_listaNavegaciones != null && m_listaNavegaciones.size() != 0){
final short paisID = m_listaNavegaciones.get(m_indice_actual).pais_id;
final short ciudadID = m_listaNavegaciones.get(m_indice_actual).ciudad_id;
Predicate<Oferta> ofertasPredicate = new Predicate<Oferta>() {
public boolean apply(Oferta oferta) {
return oferta.pais_id == paisID && oferta.ciudad_id == ciudadID;
}
};
Collection<Oferta> ofertas = General.Filtrar(oRespuestFiltradas.datos, ofertasPredicate);
oRespuestFiltradas.datos = new ArrayList<Oferta>(ofertas);
}
else{
oRespuestFiltradas.datos = new ArrayList<Oferta>();
}
adapterOfertas = new OfertasAdapter(activity, oRespuestFiltradas, oRespuesta);
lstOfertas.setAdapter(adapterOfertas);
final long ONE_MINUTE_IN_MILLIS = 60000;//millisecs
long t = Calendar.getInstance().getTime().getTime();
Date afterAddingTenMins = new Date(t + (10 * ONE_MINUTE_IN_MILLIS));
if(Datos.ventana_origen != Constantes.Ventanas_Origen.OfertasDetalle
|| (OfertasDetalleActivity.getFechaCarga() != null
&& !OfertasDetalleActivity.getFechaCarga().before(afterAddingTenMins))){
m_posicionOfertas = lstOfertas.getRefreshableView().getFirstVisiblePosition();
}
if(m_posicionOfertas != -1){
lstOfertas.getRefreshableView().setSelection(m_posicionOfertas);
}
General.OcultarCargando();
}
catch (Exception e){
e.printStackTrace();
General.OcultarCargando();
}
}