1

我有一些真正的麻煩與片段!我有一個結果活動類,它運行兩個片段,下半部分地圖與位置和近谷歌的地點標記,上半部分(或我也想要它,但它不會紅潤的工作)持有的地址和細節也是用戶選擇的標記。我得到了一切,我可以選擇標記!我可以加載我的位置,我可以得到最近的地方,我甚至可以將地點細節運行到另一個片段(但它會從屏幕上加載)。但你認爲我可以將細節加載到屏幕的上半部分! (不!)我需要幫助,我幾乎一直在撓我的頭一陣子..20至2,我不能面對另一天..我知道它的東西真正小(它總是當我問在堆棧)但我只是無法發現它。你能幫我嗎?
XML代碼保存片段,map_fragment,動態雙Android地圖/谷歌地方的詳細信息屏幕

<RelativeLayout 
    android:id="@+id/search_frag" 
    android:layout_width="match_parent" 
    android:layout_height="@dimen/results" 
    android:background="@color/cream" 
    android:layout_below="@+id/top_banner" 
    android:orientation="horizontal" 
    tools:layout="@layout/result_hint"> 
    </RelativeLayout> 
<fragment 
    android:layout_below="@id/search_frag" 
    android:id="@+id/map_fragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/cream" 
    android:orientation="horizontal" 
    android:name="boo.thefoodhunt.fragment.MapFragment" 
    tools:layout="@layout/template_map_view"/> 

ResultsActivitiy.java離開search_frag:我把一個虛擬的片段在那裏,看看它是否會加載和它,認爲它可能是更容易更換用新的片段(它不是)

public class ResultsActivity extends FragmentActivity 
     implements MapFragment.MarkerClickCB { 
    //Log 
    private final String TAG = this.getClass().getName(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_results); 
    //Master data list Fragment 

     FragmentManager fm = getSupportFragmentManager(); 

     SelectFrag firstFragment = new SelectFrag(); 

     FragmentTransaction ft = fm.beginTransaction(); 

     ft.add(R.id.search_frag, firstFragment); 
     ft.commit(); 
} 

MapFragment.java 的其他部分,如果在公共布爾onMarkerClick聲明(標記標記)。未註釋的代碼工作並傳達用戶選擇的谷歌地點詳細信息,地址並將詳細信息發送到全屏幕片段。

if (marker.equals(this.myLocMarker) && nearby != null) { 
      for (Marker placeMarker : nearby.keySet()) { 
       placeMarker.setVisible(!placeMarker.isVisible()); 
      } 
     } else if (nearby != null && nearby.containsKey(googLocation)) { 
      Intent intent = new Intent(getActivity(), TempPlaceActivity.class); 
      intent.putExtra("PLACE", nearby.get(googLocation)); 
      startActivity(intent); 
      // mCallbacks.onMarkerSelected("PLACE", nearby); 
      return true; 

的代碼是一個有點vaugue我很抱歉我沒有要發佈這一切因爲有約爲5種不同java.classes ...只是在正確的方向點將是夢幻般的。 ResultsActivity.java包含2個片段並具有一個result.xml。 MapFragment.java保存地圖和谷歌地點的詳細信息在frame.xml中。 PlacesDetailsFragments包含細節並保存在places.xml文件中。每個片段都有活動,他們都在他們似乎成爲一對的地方..我今晚放棄任何幫助將不勝感激!

+0

校正細節不會加載屏幕,我的意思是說在另一個屏幕 – Boo

回答

0

我解決了它,並認爲id分享。好的片段都寫在XML佈局是這樣的...

<RelativeLayout 
    android:id="@+id/search_frag" 
    android:layout_width="match_parent" 
    android:layout_height="@dimen/results" 
    android:layout_below="@+id/top_banner" 
    android:background="@color/cream" 
    android:orientation="horizontal" 
    tools:layout="@layout/result_hint"></RelativeLayout> 

<RelativeLayout 
    android:id="@+id/map_fragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_below="@id/search_frag" 
    android:background="@color/cream" 
    android:orientation="horizontal" 
    tools:layout="@layout/template_map_view" /> 

search_frag和map_fragment需要進行的RelativeLayout爲將要您要查看的活動中編程,他們出現

活動類 search_frag

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_results); 
     setUpMapIfNeeded(); 

     .... 
     //sets up default fragment, will later be replaced with fragment when marker is selected 
     if (findViewById(R.id.fragment_container) == null) { 

      if (savedInstanceState != null) { 
       return; 
      } 

      FragmentManager fm = getSupportFragmentManager(); 
      SelectFrag firstFragment = new SelectFrag(); 
      FragmentTransaction ft = fm.beginTransaction(); 
       ft.add(R.id.search_frag, firstFragment); 
       ft.commit(); 
      } 
... 

map_frag

private void setUpMapIfNeeded() { 
     if (mMap != null) { 
      return; 
     } 
     mMap = new MapFragment(); 
     mMap.setArguments(getIntent().getExtras()); 
     getSupportFragmentManager().beginTransaction() 
       .add(R.id.map_fragment, mMap).commit(); 
    } 

MAP FRAGMENT

MarkerClickCB mCallbacks; //communicates with the activity 
    //interface set up 
    public interface MarkerClickCB { 
      void onMarkerSelected(String place, GoogePlaces place1); 
     } 

    .... 

mMap.setOnMarkerClickListener(new OnMarkerClickListener() { 

     @Override 
     public boolean onMarkerClick(Marker marker) { 

      if (!mClusterManager.onMarkerClick(marker)) { 
       googLocation = marker; 
       cluster.getPosition(); 
       if (googLocation.equals(userLocMarker) && clusts2 == null) { 
        searchFilter(); 
       } 
       if (marker.equals(userLocMarker) && nearby != null) { 
        for (Marker placeMarker : nearby.keySet()) { 
         placeMarker.setVisible(!placeMarker.isVisible()); 
        } 
       } else if (cluster != null) { 

        mCallbacks.onMarkerSelected("PLACE", clickedClusterItem.getPlace()); 
        getDistance(clickedClusterItem.getPosition().latitude, clickedClusterItem.getPosition().longitude); 

        return true; 
       } 
      } 
      return false; 
     } 
    }); 

..Now回到保持所述先前編程的片段的活性類。我們需要用包含所選標記的谷歌地點信息的新片段替換search_frag。

活性類需要實現回調數據用於數據從地圖片段

BACK TO Activity類通信

public class ResultsActivity extends AppCompatActivity 
     implements MapFragment.MarkerClickCB 
.... 
    //previous fragment info// 
... 
    public void onMarkerSelected(String near, GoogePlaces googPlace) { 

      FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
      PlaceFragment fragment = PlaceFragment.newInstance(googPlace); 
      ft.replace(R.id.search_frag, fragment); 
      ft.commit(); 
     } 
保存數據

..Replacement片段 PLACE FRAGMENT

final static String PLACES_ID = "GoogePlaces"; 

    //Creates fragment object with details 

    public static PlaceFragment newInstance(GoogePlaces place) { 
      PlaceFragment fragment = new PlaceFragment(); 
      Bundle bundle = new Bundle(); 
      bundle.putSerializable(PLACES_ID, place); 
      fragment.setArguments(bundle); 

      return fragment; 
     } 

//this bit got a bit messy for me - welcome to comment with improvements 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     place = (GoogePlaces) getArguments().getSerializable(PLACES_ID); 



View view = inflater.inflate(R.layout.activity_place_detail, container, false); 

    this.context = getActivity().getApplicationContext(); 

    Log.i("PLACE EXAMPLE", "Place Detail Activity"); 


     place = (GoogePlaces) getArguments().getSerializable(PLACES_ID); 
... 

     getActivity().setTitle(place.getName()); 
     String placesKey = getResources().getString(R.string.places_key); 

//connect to google places - to gather eatery details 
     String placesRequest = "https://maps.googleapis.com/maps/api/place/details/json?" + 
       "key=" + placesKey + "&reference=" + place.getReference(); 
     PlacesDetailReadFeed detailTask = new PlacesDetailReadFeed(); 
     detailTask.execute(new String[]{placesRequest}); 

     ...... 

    return view; 
    } 

好吧,作爲新手(ish)程序員,這對我來說很難,我不得不承認,任何指針,代碼清理的批評將不勝感激