Моя идея заключается в использовании AsynTask для загрузки набора данных и сохранения в массиве. То, что я проверил и работает хорошо. В методе onPostExecute я вызываю функцию для обновления моего списка ListView и загружаю данные, хранящиеся в ArrayList.ListView + ArrayList + AsyncTask
Код:
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<Servicio>
{
private ArrayList<Servicio> servicioList;
public MyCustomAdapter(Context context, int textViewResourceId,ArrayList<Servicio> servicioList)
{
super(context, textViewResourceId,servicioList);
this.servicioList = new ArrayList<Servicio>();
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());
неустранимые: Основной java.lang.NullPointerException на app.serviciosprote.Inicio $ MyCustomAdapter.getView (Inicio.java:423)
в android.widget.AbsListView.obtainView (AbsListView .java: 2350) на android.widget.ListView.measureHeightOfChildren (ListView.java:1409) на android.widget.ListView.onMeasure (ListView.java:1273) на android.view.View.measure (View.java : 15286) на android.widget.RelativeLayout.measureChild (RelativeLayout.java:602) на android.widget.RelativeLayout.onMeasure (RelativeLayout.java:415) на android.view.View.measure (View.java:15286) в android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:4832) в android.widget.LinearLayout.measureChildBeforeLayout (LinearLayout.java:1390) на android.widget.LinearLayout.measureVertical (LinearLayout.java:681) на android.widget.LinearLayout.onMeasure (LinearLayout.java:574) на android.view.View.measure (View.java:15286) на android. view.ViewGroup.measureChildWithMargins (ViewGroup.java:4832) на android.widget.FrameLayout.onMeasure (FrameLayout.java:310)
на android.view.View.measure (View.java:15286) в android.widget .LinearLayout.measureVertical (LinearLayout.java:833) на android.widget.LinearLayout.onMeasure (LinearLayout.java:574) на android.view.View.measure (View.java:15286) в android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:4832) на android.widget.FrameLayout.onMeasure (FrameLayout.java:310) в com.android.internal.policy.impl.PhoneWindow $ DecorView.onMeasure (PhoneWindow.java:2269)
Спасибо за попытку помочь
Я думаю, проблема уже решена и заключалась в том, что если текст TextView очень длинный и не подходит, то не получается – mdl
ваше объяснение на самом деле не имеет смысла. то, что вы описываете, не может привести к тому, что вы разместили stacktrace. – njzk2
в отношении события на клик-слушателе, google он, вы найдете достаточно ловушек, чтобы помочь вам .. вопрос о другом вопросе может быть обманом .. – Elltz