0
私のアプリでは、ListViewに写真、タイトル、および説明が表示されます。 でも、スクロールするとListViewが遅くなってアプリを閉じることさえできます。 ListViewはスクロールするたびに要素を読み込んでいます。そのためアプリがクラッシュします。ListView with photos slow
誰かが効率的なListViewを手伝ってくれますか?ここで
は私のコードです:ここでは
public class PropiedadCursorAdapter extends CursorAdapter{
private LayoutInflater mLayoutInflater;
private Context ctx;
private Cursor miCursor;
private int layout;
private int casaIndex;
private int tituloIndex;
private int ubicacionIndex;
private PropiedadDbAdapter dbAdapter =null;
private class ViewHolder {
ImageView ivCasa;
TextView tvTitulo;
TextView tvUbicacion;
ViewHolder(View v) {
tvTitulo = (TextView) v.findViewById(R.id.tv_titulo);
tvUbicacion = (TextView) v.findViewById(R.id.tv_ubicacion);
ivCasa = (ImageView) v.findViewById(R.id.ivCasa);
}
}
public PropiedadCursorAdapter(Context context, int layout, Cursor c){
super(context, c);
this.ctx = context;
this.miCursor = c;
mLayoutInflater = LayoutInflater.from(context);
}
@Override
public void bindView(View v, Context context, Cursor c) {
int icol_ivCasa = c.getColumnIndex(C_COLUMNA_IMAGENES);
int icol_tvTitulo = c.getColumnIndex(PropiedadDbAdapter.C_COLUMNA_TITULO);
int icol_tvUbicacion = c.getColumnIndex(PropiedadDbAdapter.C_COLUMNA_DIRECCION);
String stxtCasa = c.getString(icol_ivCasa);
String stxtTitulo = c.getString(icol_tvTitulo);
String stxUbicacion = c.getString(icol_tvUbicacion);
ViewHolder vh = (ViewHolder)v.getTag();
Picasso.with(context).load(stxtCasa).into(vh.ivCasa);
vh.tvTitulo.setText(stxtTitulo);
vh.tvUbicacion.setText(stxUbicacion);
Log.d("PropiedadCursor", stxtCasa);
}
@Override
public View newView(Context ctx, Cursor cursor, ViewGroup parent) {
View vView = mLayoutInflater.inflate(R.layout.layout_lista_propiedades, parent, false);
vView.setTag(new ViewHolder(vView));
return vView;
}
}
は私dbAdapterが
public class PropiedadDbAdapter {
public static final String C_TABLAp = "PROPIEDADES";
/**
* TABLE PROPIEDADES
*/
public static final String C_COLUMNA_ID = "_id";
public static final String C_COLUMNA_TITULO = "titulo";
public static final String C_COLUMNA_PROPIEDAD = "propiedad";
public static final String C_COLUMNA_CATEGORIA = "categoria";
public static final String C_COLUMNA_COLONIA = "colonia";
public static final String C_COLUMNA_DIRECCION = "direccion";
public static final String C_COLUMNA_COORDENADAS = "coordenadas";
public static final String C_COLUMNA_SUPERFICIE = "superficie";
public static final String C_COLUMNA_RECAMARAS = "recamaras";
public static final String C_COLUMNA_IMAGENES = "imagenes";
public static final String C_COLUMNA_PRECIO = "precio";
public static final String C_COLUMNA_ANTIGUEDAD = "antiguedad";
public static final String C_COLUMNA_FECHA = "fecha";
public static final String C_COLUMNA_ACTUALIZACION= "actualizacion";
public static final String C_COLUMNA_EDO_SYNC= "edo_sync";
public static final String C_COLUMNA_DESCRIPCION = "descripcion";
public static final String C_COLUMNA_USR_PROP_ID= "prop_id";
private Context contexto;
private BienesRaDbHeper mDbHelper;
private SQLiteDatabase mDb;
private String[] columnasP = new String[]{C_COLUMNA_ID, C_COLUMNA_TITULO, C_COLUMNA_PROPIEDAD, C_COLUMNA_CATEGORIA, C_COLUMNA_COLONIA, C_COLUMNA_DIRECCION, C_COLUMNA_COORDENADAS, C_COLUMNA_SUPERFICIE, C_COLUMNA_RECAMARAS, C_COLUMNA_IMAGENES, C_COLUMNA_PRECIO, C_COLUMNA_ANTIGUEDAD, C_COLUMNA_FECHA, C_COLUMNA_ACTUALIZACION, C_COLUMNA_EDO_SYNC, C_COLUMNA_DESCRIPCION, C_COLUMNA_USR_PROP_ID};
private String[] columnaUserPropID = new String[]{C_COLUMNA_USR_PROP_ID};
public PropiedadDbAdapter(Context context)
{
this.contexto = context;
}
public PropiedadDbAdapter abrir() throws SQLException
{
mDbHelper = new BienesRaDbHeper(contexto);
mDb = mDbHelper.getWritableDatabase();
return this;
}
public void cerrar()
{
mDbHelper.close();
}
public Cursor getCursor() throws SQLException
{
Cursor cursor = mDb.query(true, C_TABLAp, columnasP, null, null, null, null, null, null);
return cursor;
}
public Cursor getRegistro(long id) throws SQLException
{
Cursor c = mDb.query(true, C_TABLAp, columnasP, C_COLUMNA_ID + "=" + id, null, null, null, null, null);
if (c != null) {
c.moveToFirst();
}
return c;
}
public long insertPropiedad(ContentValues reg)
{
if (mDb == null)
abrir();
return mDb.insert(C_TABLAp, null, reg);
}
public long update(ContentValues reg)
{
long result = 0;
if (mDb == null)
abrir();
if (reg.containsKey(C_COLUMNA_ID))
{
long id = reg.getAsLong(C_COLUMNA_ID);
reg.remove(C_COLUMNA_ID);
result = mDb.update(C_TABLAp, reg, "_id=" + id, null);
}
return result;
}
public Cursor getCursor(String filtro) throws SQLException
{
Cursor c = mDb.query(true, C_TABLAp, columnasP, filtro, null, null, null, null, null);
return c; }
public Cursor getIdProp(long id) throws SQLException {
Cursor c = mDb.query(true, C_TABLAp, columnasP, C_COLUMNA_USR_PROP_ID + "=" + id, null, null,null,null,null);
if (c != null) {
c.moveToFirst();
Log.d("PROPIEDAD", String.valueOf(c));
}
return c;
}
public long delete(long id)
{
if (mDb == null)
abrir();
return mDb.delete(C_TABLAp, "_id=" + id, null);
}}
は更新を少し取ります!リサイクルビューをリストビューではなく使用すると、スムーズなユーザーエクスペリエンスが得られます。http://www.androidhive.info/2016/01/android-working-with-recycler-view/ – Radhey
中古グライドライブラリとリサイクルビューも使用しますカードビューあり –
私は@Radheyに同意しますが、私は私たちの設定を強制するべきではないと思います。おそらく、これはopプロジェクトの要件です。 –