AsyncTask, CustomBaseAdapter и Listview - PullRequest
       35

AsyncTask, CustomBaseAdapter и Listview

0 голосов
/ 25 октября 2011

У меня есть CustomBaseAdapter, которым я заполняю определенные поля:

   public ArrayList<SearchResults> GetSearchResults(){
          ArrayList<SearchResults> results = new ArrayList<SearchResults>();

          Document doc = Jsoup.parse(kpn); 
          Elements tdsFromSecondColumn = doc.select("table.personaltable td:eq(0)");
          Elements tdsFromSecondColumn1 = doc.select("table.personaltable td:eq(1)");
          SearchResults sr1 = new SearchResults();

          for (Element tdFromSecondColumn : tdsFromSecondColumn) {                           
               sr1 = new SearchResults();
               sr1.setNaam(tdFromSecondColumn.text());
               results.add(sr1);
          }

          for (Element tdFromSecondColumn1 : tdsFromSecondColumn1) {                             
               sr1 = new SearchResults();
               sr1.setWaarde(tdFromSecondColumn1.text());
               results.add(sr1);
          }

          return results;

    }

Я хочу запустить onPostExecute AsyncTask, но получаю принудительное закрытие:

@Override  
    protected void onPostExecute(String result) {  
        ListView kp = (ListView)findViewById(R.id.kpn); 

        ArrayList<SearchResults> searchResults = GetSearchResult();            
        kp.setAdapter(new MyCustomBaseAdapter(this, searchResults)); <--- think here is the error

        progress.dismiss();

    } 

Возможен ли этот код? Если нет, то что следует изменить. Заранее спасибо.

1 Ответ

0 голосов
/ 25 октября 2011

Хорошо, я избавился от исключения, выполнив:

kp.setAdapter(new MyCustomBaseAdapter(AppName.this, searchResults));

Но поля по-прежнему неправильно заполнены с помощью JSoup, сначала отображаются все поля naam, а затем поля waarde.

naam:
naam:
naam:
waarde
waarde
waarde

Это должно быть:

naam: waarde
naam: waarde

Кто-нибудь знает, как объединить 2 для циклов JSoup, чтобы поля были заполнены правильно:

       Document doc = Jsoup.parse(kpn); 
       Elements tdsFromSecondColumn = doc.select("table.personaltable td:eq(0)");
       Elements tdsFromSecondColumn1 = doc.select("table.personaltable td:eq(1)");
       SearchResults sr1 = new SearchResults();

          for (Element tdFromSecondColumn : tdsFromSecondColumn) {                           
               sr1 = new SearchResults();
               sr1.setNaam(tdFromSecondColumn.text());
               results.add(sr1);
          }

          for (Element tdFromSecondColumn1 : tdsFromSecondColumn1) {                             
               sr1 = new SearchResults();
               sr1.setWaarde(tdFromSecondColumn1.text());
               results.add(sr1);
          }

Вот мой CustomBaseAdapterпо запросу:

public class MyCustomBaseAdapter extends BaseAdapter {

private static ArrayList<SearchResults> searchArrayList;

  private LayoutInflater mInflater;


 public MyCustomBaseAdapter(Context context, ArrayList<SearchResults> results) {
   searchArrayList = results;
   mInflater = LayoutInflater.from(context);
  }


public int getCount() {
   return searchArrayList.size();
  }

 public Object getItem(int position) {
   return searchArrayList.get(position);
  }

 public long getItemId(int position) {
   return position;
  }

 public View getView(int position, View convertView, ViewGroup parent) {
   ViewHolder holder;
   if (convertView == null) {
    convertView = mInflater.inflate(R.layout.test, null);
    holder = new ViewHolder();
    holder.txtNaam = (TextView) convertView.findViewById(R.id.naam);
    holder.txtWaarde = (TextView) convertView.findViewById(R.id.waarde);

   convertView.setTag(holder);
   } else {
    holder = (ViewHolder) convertView.getTag();
   }

   holder.txtNaam.setText(searchArrayList.get(position).getNaam());
   holder.txtWaarde.setText(searchArrayList.get(position).getWaarde());

  return convertView;
  }

 static class ViewHolder {
   TextView txtNaam;
   TextView txtWaarde;
  }


}
...