android listview 无数据提示,Android中listview加载数据的时候出现空白页

当Android的ListView在加载数据时出现空白页,可能是由于数据问题、Adapter实例化时机不当或布局设置错误导致。确保传入Adapter的数据有效且在正确的位置实例化Adapter。此外,检查ListView的布局,避免将其设为gone或使用wrap_content导致高度为0,影响getView()执行。提供了一个基础Adapter示例以供参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天写了一个异步加载图片,防止图片错位的demo,自己自定义了一个baseAdapter,我的天,一直都是空白界面,listview的getview()方法不执行,请调试很很久,按照理论应该是可以出来数据的。找了种种,结果就是数据的问题,看着别人的总结方法我也写一下。

第一、没有执行getview往往是因为没有显示页面。这个时候,我们首先要保证确实有有效的数据传到了自定义的适配器里。因为如果getcount()的返回值是0的话,getview是不会被执行的。

第二、要确认adapter在核实的时间和位置去实例化,比如说在异步任务的onPostExecute()方法中去实例化adapter的话,甚至会导致该方法也不会被执行到,当然getview更执行不到了。

第三、布局的问题。在xml文件中,有些属性会极大的影响到getview的执行。他执行的前提是,他有空间去展示。当你将listview设置为gone的时候,他是不会去执行这个方法的。在适配数据前将他改为可见就好了。

另外一个就是将父布局设置成android:layout_height="wrap_content",因为页面的测量是在oncreate的时候被测量的。而此时里面是没有内容的,也就是高度为0,在数据加载好之后,父布局并没有重新测量,而只是listview重新测量了,但是因为listview此时的高度是0,所以getview()还是无法被执行到。将android:layout_height="wrap_content"改成android:layout_height="match_parent"就好了

下面提供一下baseadapter。用的时候方便使用

**

* Created by 凉菇凉on 2016/8/24.

*/

public abstract class BasicAdapter extends android.widget.BaseAdapter {

private ArrayListmList;

private Context context;

public BasicAdapter(Context context,ArrayListmList){

this.context=context;

this.mList=mList;

}

@Override

public int getCount() {

return mList.size();

}

@Override

public Object getItem(int i) {

return mList.get(i);

}

@Override

public long getItemId(int i) {

return i;

}

@Override

public View getView(int i, View convertView, ViewGroup viewGroup) {

ViewHolder holder = null;

if (convertView == null) {

holder = new ViewHolder();

convertView = LayoutInflater.from(context).inflate(getViewId(),

null);

convertView.setTag(holder);

} else {

holder = (ViewHolder) convertView.getTag();

}

setDate(convertView, mList.get(i), holder, i);

return convertView;

}

public final class ViewHolder{

public SparseArrayviews=new SparseArray();

@SuppressWarnings("unchecked")

public E findView(View convertView, int resid) {

View v = views.get(resid);

if (null == v) {

v = convertView.findViewById(resid);

views.put(resid, v);

}

return ((E) v);

}

}

protected abstract int getViewId();

protected abstract void setDate(View view, T t, ViewHolder viewHolder,

int position);

}

在activity中用的时候是这样子的】

/**

* 凉菇凉

*/

class MyAdapter extends BasicAdapter{

public MyAdapter(Context context, ArrayList mList) {

super(context, mList);

}

@Override

protected int getViewId() {

return R.layout.activity_image_listview_item;

}

@Override

protected void setDate(View view, String s, ViewHolder viewHolder, int position) {

TextView tv_title = (TextView)viewHolder.findView(view,R.id.tv_title);

tv_title.setText(s);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值