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
謝謝。 您能說說我如何為點擊事件做一個聽眾嗎?
問另一個問題。
總結
以上是生活随笔為你收集整理的android listview asynctask,关于android:ListView + ArrayList + AsyncTask的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 装linux时可用空间只有1929k,求
- 下一篇: 千牛怎么注销卖家店铺_新店铺怎么拥有亚马