我正在开发一个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
答案 0 :(得分:1)
在适配器上,如果view为null,则只需要膨胀,否则只需填充数据