2013-06-02 46 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

您需要的是自定義適配器。以下是你需要這樣做的方法。如果我沒有錯,你的數據存儲在List>中。根據您的要求更改。下面是你在你的活動或片段做什麼:

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在地圖中繪製標記,並且發生了這種情況,我不知道缺少什麼東西,解析列表活動和適配器類之間 –