android listview asynctask,关于android:ListView + ArrayList + AsyncTask

本问题已经有最佳答案,请猛点这里访问。

我的想法是使用AsynTask下载数据集并存储在arrayList中。 我已经检查并运行良好。

在onPostExecute方法中,我调用一个函数来更新listView,然后加载存储在ArrayList中的数据。

码:

protected void onPostExecute(String result)

{

progressDialog.setProgress(99);

actualizarDisplay();

}

方法actulizarDisplay:

dataAdapter = new MyCustomAdapter(this,R.layout.servicio, listaServicios);

ListView listView = (ListView) findViewById(R.id.listaServ);

listView.setAdapter(dataAdapter);

和类MyCustomAdapter:

private class MyCustomAdapter extends ArrayAdapter

{

private ArrayList servicioList;

public MyCustomAdapter(Context context, int textViewResourceId,ArrayList servicioList)

{

super(context, textViewResourceId,servicioList);

this.servicioList = new ArrayList();

this.servicioList.addAll(servicioList);

}

private class ViewHolder

{

TextView nombre, hora, lugar, fecha;

ImageView tipo;

}

@Override

public View getView(int position, View convertView, ViewGroup parent)

{

ViewHolder holder = null;

if (convertView == null)

{

LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);

convertView = vi.inflate(R.layout.servicio, null);

holder = new ViewHolder();

holder.nombre = (TextView) convertView.findViewById(R.id.titulo);

holder.lugar = (TextView) convertView.findViewById(R.id.lugar);

holder.hora = (TextView) convertView.findViewById(R.id.hora);

holder.fecha = (TextView) convertView.findViewById(R.id.fecha);

convertView.setTag(holder);

}

else

{

holder = (ViewHolder) convertView.getTag();

}

Servicio servicio = servicioList.get(position);

Log.i("ConvertView", servicio.getNombre()); // the correct value is displayed

holder.nombre.setText(servicio.getNombre());

holder.hora.setText(servicio.getHora());

holder.lugar.setText(servicio.getLugar());

holder.fecha.setText(servicio.getFecha());

if (servicio.tipo == 0)

holder.tipo.setImageResource(R.drawable.cultural);

return convertView;

}

}

这是logcat中的错误,第423行是:holder.nombre.setText(servicio.getNombre());

FATAL EXCEPTION: main java.lang.NullPointerException at

app.serviciosprote.Inicio$MyCustomAdapter.getView(Inicio.java:423)

at android.widget.AbsListView.obtainView(AbsListView.java:2350)

at android.widget.ListView.measureHeightOfChildren(ListView.java:1409)

at android.widget.ListView.onMeasure(ListView.java:1273)

at android.view.View.measure(View.java:15286)

at android.widget.RelativeLayout.measureChild(RelativeLayout.java:602)

at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:415)

at android.view.View.measure(View.java:15286)

at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4832)

at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390)

at android.widget.LinearLayout.measureVertical(LinearLayout.java:681)

at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)

at android.view.View.measure(View.java:15286)

at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4832)

at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)

at android.view.View.measure(View.java:15286)

at android.widget.LinearLayout.measureVertical(LinearLayout.java:833)

at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)

at android.view.View.measure(View.java:15286)

at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4832)

at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)

at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2269)

感谢您的帮助

我认为问题已经解决,并且是如果TextView的文本很长且不适合,则会失败

您的解释没有任何意义。 您描述的内容不会导致您发布的堆栈跟踪。

关于点击监听器上的事件,用谷歌搜索,您会发现足够的tut可以帮助您..问另一个问题可能是一个骗子。

Comment

这可能意味着您的第一个textview不在此xml文件中

servicio.xml

没有ID为titulo的textview

holder.nombre = (TextView) convertView.findViewById(R.id.titulo);

因此空指针

仔细检查您是否在正确的xml中使用正确的ID调用正确的textview

谢谢。 您能说说我如何为点击事件做一个听众吗?

问另一个问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值