2015-06-24 83 views
1

我想將小地圖添加到列表中,並創建了一個Cursor適配器來處理位置列表。如何引用android列表適配器中的片段

對個人位置的佈局是這樣的:

<LinearLayout 
    ... > 

    <TextView android:id="@+id/start_loc" 
    ... 
    /> 

    <fragment android:id="@+id/start_loc_map" 
      android:name="com.google.android.gms.maps.MapFragment" 
    ... 
    /> 

</LinearLayout> 

然後在適配器:

@Override 
public void bindView(View view, Context context, Cursor cursor) { 
    startLocView = (TextView) view.findViewById(R.id.start_loc); 

則是這樣的:

SupportMapFragment startLocMap = 
     (SupportMapFragment) view.findViewById(R.id.start_loc_map); 

或:

這些作品都沒有。該視圖(並不令人意外)不能作爲片段進行轉換,並且不存在可用於適配器的片段或活動。我可以得到一個上下文和(Activity) context.getFragmentManager,但我找不到任何方式從getChildFragmentManager。我可以得到一個FrameLayout,這是容器對象,但我不知道任何方式引用其中包含的碎片。

如何從適配器獲取對佈局中的靜態(?)片段的引用?獲得<fragment><TextView>簡單嗎?

回答

1

在使用遊標適配器的列表視圖中顯示地圖會有很多工作。您應該面對的另一個問題是性能下降和應用程序崩潰。在listView中直接使用mapView是一項沉重的操作。這會導致延遲,並且結果會導致應用程序的用戶體驗緩慢。爲了避免這種行爲,你可以選擇使用Static maps。這將啓用在您的列表視圖中延遲加載地圖,並且therby用戶不必不時地點擊地圖。如果你沒有在地圖上提供用戶的當前位置litview靜態地圖是最好的選擇。

我在下面提供了一個使用此方法的小示例。首先從數據創建一個列表視圖(API或數據庫)。然後將數據(如緯度和經度)傳遞給一個字符串,其中包含一些靜態變量,如下所示。

String getMapURL = "http://maps.googleapis.com/maps/api/staticmap?zoom=12&size=360x180&markers=size:mid|color:green|" 
+ JOLocation.getString("latitude") 
+ "," 
+ JOLocation.getString("longitude") 
+ "&sensor=false"; 

上述構造的URL在瀏覽器中使用時會返回一個.PNG文件。然後,在我的活動適配器中,此方法導致在應用程序中延遲加載地圖,在運行時獲取顯示座標的標記,從而避免代碼繁重工作。

希望這會有所幫助!

+0

謝謝你。我正在尋找一種方法來做類似的事情,但是我需要能夠像通過maps API那樣標記地圖,添加標記。這個階段不一定需要互動。類似的線程中的海報(http://stackoverflow.com/questions/27397269/how-to-add-mapfragment-inside-a-listview-item-within-adapter)建議使用「lite」('options.liteMode (true);')模式,這將改善預期的問題。我還沒有嘗試過。 – albe

+0

此外,這取決於位置。 – albe

相關問題