Android - Custom ArrayAdapter中的getView()问题

时间:2015-04-27 14:07:06

标签: android rss-reader

我正在开发一个rss阅读器,我有问题从网站填写带有图像和textview的列表视图。我正在使用Android Studio并且没有填充listview,我找不到问题,我确信在编译时不会抛出错误。要将图像上传到远程,请使用Volley库中附加的NetworkImageView。在日志中不会抛出错误。

这是自定义类的getView

@Override
    public View getView(final int position, final View convertView, final ViewGroup parent) {

    LayoutInflater inflador = LayoutInflater.from(parent.getContext());

    //Referencia del View procesado
    View listViewItem;

    //Compruebo si ya existe el listview
    listViewItem = null == convertView ? inflador.inflate(R.layout.listado_modelo, parent, false) : convertView;

    //Defino un item
    final Post item = items.get(position);

    //Obtengo los Views correspondientes
    final TextView tvTitulo = (TextView) listViewItem.findViewById(R.id.tvTituloListView);
    final TextView tvFecha = (TextView) listViewItem.findViewById(R.id.tvFechaListView);
    final TextView tvDescripcion = (TextView) listViewItem.findViewById(R.id.tvDescripcionListView);
    final NetworkImageView ivImagen = (NetworkImageView) listViewItem.findViewById(R.id.nivListView);

    //Actualizo los Views
    tvTitulo.setText(item.getTitulo());
    tvFecha.setText(item.getFecha());
    tvDescripcion.setText(item.getDescripcion());

   final String url = item.getImagen();

    for(int i = 0; i< items.size() ; i++) {
        Log.i("INFORMACION: ", items.get(position).getImagen());
    }

    // Obtener el image loader
    Principal.il = CargaImagenesRemotas.getInstancia(getContext()).getCargadorImagen();
    // Petición
    Principal.il.get(url, ImageLoader.getImageListener(ivImagen, R.drawable.imagen, R.drawable.imagenerror));
    ivImagen.setImageUrl(url, Principal.il);

    //Devuelvo el View
    return listViewItem;

}

这是我调用listview

的ActivityMain.java
@Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Get the view from listview_main.xml
    setContentView(R.layout.activity_principal);

    tvRss = (TextView) findViewById(R.id.tvDireccionRss);
    btnObtenerCanal = (ImageButton) findViewById(R.id.ibtnObtenerCanal);
    btnObtenerNoticias = (ImageButton) findViewById(R.id.ibtnObtenerNoticias);

    btnObtenerCanal.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            //Obtengo el feed Rss para consultar
            //Aca parseo el json para obtener la direccion del rss, funciona ok
            obtenerCanal();

        }
    });

    //Defino el Listener del Boton para obtener las Noticias
    btnObtenerNoticias.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if(tvRss.getText() == ""){
                Toast.makeText(Principal.this, "Es necesario Obtener el canal primero", Toast.LENGTH_LONG).show();
            }else{
                //Realizo el trabajo para obtener las noticias
                obtenerNoticias();
            }

        }
    });

}

public void obtenerNoticias(){

    //Instancio el ListView
    lvNoticias = (ListView) findViewById(R.id.lvNoticias);

    //Creo y Seteo el Adaptador
    adaptador = new AdaptadorNoticias(Principal.this);

    lvNoticias.setAdapter(adaptador);

}

我将图像加载到远程的类。 CargaImagenesRemotas.java

public class CargaImagenesRemotas {

private static CargaImagenesRemotas instancia;
private static Context contexto;
private RequestQueue requerimientoQueue;
private ImageLoader cargadorImagen;

private CargaImagenesRemotas (Context context){

    contexto = context;
    requerimientoQueue = getRequerimientoQueue();

    cargadorImagen = new ImageLoader(requerimientoQueue, new ImageLoader.ImageCache() {
                private final LruCache<String, Bitmap>
                        cache = new LruCache<String, Bitmap>(20);

                @Override
                public Bitmap getBitmap(String url) {
                    return cache.get(url);
                }

                @Override
                public void putBitmap(String url, Bitmap bitmap) {
                    cache.put(url, bitmap);
                }
            });

}

public static synchronized CargaImagenesRemotas getInstancia(Context context){
    if(instancia == null){
        instancia = new CargaImagenesRemotas(context);
    }

    return instancia;
}

public RequestQueue getRequerimientoQueue(){

    if(requerimientoQueue == null){
        Cache cache = new DiskBasedCache(contexto.getCacheDir(), 10*1024*1024);
        Network network = new BasicNetwork(new HurlStack());
        requerimientoQueue = new RequestQueue(cache, network);

        requerimientoQueue.start();
    }

    return requerimientoQueue;

}

public ImageLoader getCargadorImagen(){
    return cargadorImagen;
}

}

这是日志

04-26 12:59:02.584 2996-2996/OpenGLRenderer﹕ TextureCache::get: create texture(0xb7f50100): name, size, mSize = 1, 3456000, 3456000

04-26 12:59:02.608 2996-2996/OpenGLRenderer﹕ TextureCache::get: create texture(0xb7f63668): name, size, mSize = 2, 43200, 3499200

04-26 12:59:02.620 2996-2996/OpenGLRenderer﹕ TextureCache::get: create texture(0xb7f2e710): name, size, mSize = 3, 45900, 3545100

04-26 12:59:02.624 2996-2996/OpenGLRenderer﹕ TextureCache::get: create texture(0xb7f2e6d8): name, size, mSize = 4, 44232, 3589332

04-26 12:59:02.624 2996-2996/OpenGLRenderer﹕ TextureCache::get: create texture(0xb7f2f048): name, size, mSize = 5, 44232, 3633564

04-26 12:59:02.624 2996-2996/OpenGLRenderer﹕ TextureCache::get: create texture(0xb7f6ac08): name, size, mSize = 6, 2304, 3635868

04-26 12:59:07.540 2996-2996/lectorrss W/EGL_genymotion﹕ eglSurfaceAttrib not implemented

04-26 12:59:08.304 2996-2996/lectorrss W/EGL_genymotion﹕ eglSurfaceAttrib not implemented

04-26 12:59:08.308 2996-2996/lectorrss D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb7f5ce68): name, size, mSize = 29, 34560, 3670428

04-26 12:59:08.308 2996-2996/lectorrss D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb7f5be38): name, size, mSize = 30, 20736, 3691164

04-26 12:59:08.308 2996-2996/lectorrss D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb7f4aae8): name, size, mSize = 31, 20736, 3711900

04-26 12:59:10.220 2996-3000/lectorrss D/dalvikvm﹕ GC_CONCURRENT freed 2408K, 20% free 12037K/14983K, paused 1ms+0ms, total 3ms

04-26 12:59:10.236 2996-2996/lectorrss W/EGL_genymotion﹕ eglSurfaceAttrib not implemented

1 个答案:

答案 0 :(得分:1)

在适配器上,如果view为null,则只需要膨胀,否则只需填充数据