2013-06-02 3 views
1

Я разрабатываю приложение для получения близлежащих заправочных станций и показываю их в списке, моя проблема заключается в том, чтобы показать их в списке, я прошел через множество руководств, но не смог выяснить, проблема, которая не отображается в списке с данными, я уверен, что проблема в этой части, но не знаю, как ее решить, и чтобы убедиться в том, что проблема в этом я попытался установить диалог прогресса и уволить его непосредственно перед этой частью код.ArrayList не может быть показан в виде списка - android

здесь метод, чтобы показать список массивов с помощью адаптера я звоню из onPostexecute

protected void showItems(ArrayList<HashMap<String,String>> placestoList2){ 

      ListAdapter adapter101 = new SimpleAdapter(MainActivity.this, placestoList2, 
        R.layout.list_item, 
        new String[] { KEY_NAME, KEY_VICINITY}, new int[] { 
          R.id.name, R.id.vicinty }); 
lv.setAdapter(adapter101);  
     } 

и этот метод, чтобы получить данные из списка я получаю мест

protected ArrayList<HashMap<String,String>> getLocations(List<HashMap<String,String>> list){ 

       for(int i=0;i<list.size();i++){ 

        HashMap<String, String> mapM = list.get(i); 
        HashMap<String, String> mapM2 = new HashMap<String, String>(); 


        String name = mapM.get("place_name"); 
        mapM2.put(KEY_NAME, name); 

        String vicinity = mapM.get("vicinity"); 
        mapM2.put(vicinity, vicinity); 
        placesListItems.add(mapM2); 
        } 
       return placesListItems; 
} 

и Список просмотра в макете

<ListView 
     android:id="@+id/listView" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 

другой макет

<TextView android:id="@+id/name" 
    android:visibility="gone" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"/> 

<TextView android:id="@+id/vicinty" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:padding="10dip" 
    android:textStyle="bold" 
    android:textSize="16sp"/> 
+0

Что вы подразумеваете под ", но не могли решить проблему?" Что ваш код делает или не делает, что вы хотите, чтобы произошло или не произошло? – MarsAtomic

+0

Пожалуйста, см. Мой отредактированный вопрос –

ответ

0

Здесь нужен пользовательский адаптер. Вот как вам это нужно. Если я не ошибаюсь, ваши данные хранятся в списке>. Измените в соответствии с вашим требованием. Вот что вы делаете в вашей деятельности или фрагмента:

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

//Call this when you have data. If you are only updating think of something else 
Adapterlist adapter=new Adapterlist(this,getData()); 
listView.setAdapter(adapter); 

Вот пользовательский адаптер:

public class Adapterlist extends BaseAdapter { 

private Context context; 
private List<HashMap<String,String>> list; 

public static final String PLACE="place_name"; 
public static final String VICINITY="vicinty"; 

public AdapterApplist(Context context, List<HashMap<String,String>> list) { 
    this.context = context; 
    this.list = list; 
} 

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

public Object getItem(int position) { 
    return position; 
} 

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

public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 

    if (convertView == null){ 
     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = inflater.inflate(R.layout.list_row, null); 

     holder = new ViewHolder(); 
     holder.name = (TextView) view 
       .findViewById(R.id.name); 
     holder.vicinty = (TextView) view 
       .findViewById(R.id.vicinty); 

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

    setUI(holder,position); 

    return view; 
} 

private void setUI(ViewHolder holder,int position){ 
    HashMap<String, String> map = list.get(position); 

    holder.name.setText(map.get(PLACE)); 
    holder.vicinty.setText(map.get(VICINITY)); 
} 

public static class ViewHolder { 
    public TextView name; 
    public TextView vicinty; 
} 

}

Пожалуйста, больше исследований в следующий раз. Это можно найти по всему Интернету.

+0

Спасибо за ваш ответ, оцените это, я просто попробовал, но не получил представление тоже, и я не очень разбираюсь в коде, поэтому я отправляю вопрос, который я искал, но не получил что мне нужно –

+0

запишите свой конструктор list.size() в конструкторе адаптера и убедитесь, что список не пуст, если он не опубликовал ваш полный макет xml. – Milan

+0

Я попытался отправить размер списка в конструкторе и сделать общедоступным int getCount() { // return list.size(); \t размер возврата; }но ничего не отображается, а для второй части список не пуст, потому что я попытался что-то сделать, чтобы нарисовать маркеры на карте, используя latlng в списке, и это произошло. Я не знаю, чего не хватает, это список разбора между активностью и классом адаптера –

Смежные вопросы