2015-06-17 49 views
0

我知道這裏有一些類似的問題,但我還沒有看到有這個確切問題的問題。我有ViewPager,我有MapsActivity.java,它延伸FragmentActivity。一個標籤我想成爲listView另一個標籤將會是地圖。使用FragmentPagerAdapter裏面的FragmentActivity地圖

目前適配器接受Fragment但不是FragmentActivity這就是地圖。我需要知道最好的方法,因爲我目前的設置如何讓標籤內的地圖。它在自己的活動的標籤之外自行工作,但那不是我想要的地方。我不想使用MapView,因爲它們太舊了。我正在努力使自己的發展儘可能現代化。

這裏是適配器和在那裏我建立了ViewPager內的MainActivity.java

private void setupViewPager(ViewPager viewPager) { 
    Adapter adapter = new Adapter(getSupportFragmentManager()); 
    adapter.addFragment(new ListFragment(), "Events"); 
    adapter.addFragment(new ListFragment(), "Map"); 
    //where I want to add the MapsActivity^ 
    viewPager.setAdapter(adapter); 
} 

static class Adapter extends FragmentPagerAdapter { 
    private final List<Fragment> mFragments = new ArrayList<>(); 
    private final List<String> mFragmentTitles = new ArrayList<>(); 

    public Adapter(FragmentManager fm) { 
     super(fm); 
    } 

    public void addFragment(Fragment fragment, String title) { 
     mFragments.add(fragment); 
     mFragmentTitles.add(title); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return mFragments.get(position); 
    } 

    @Override 
    public int getCount() { 
     return mFragments.size(); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return mFragmentTitles.get(position); 
    } 
} 

這裏是準系統MapsActivity.java我想要得到的標籤內:

public class MapsActivity extends FragmentActivity { 

    private GoogleMap mMap; // Might be null if Google Play services APK is not available. 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_maps); 
     setUpMapIfNeeded(); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     setUpMapIfNeeded(); 
    } 
    private void setUpMapIfNeeded() { 
     // Do a null check to confirm that we have not already instantiated the map. 
     if (mMap == null) { 
      // Try to obtain the map from the SupportMapFragment. 
      mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)) 
        .getMap(); 
      // Check if we were successful in obtaining the map. 
      if (mMap != null) { 
       setUpMap(); 
      } 
     } 
    } 

    private void setUpMap() { 
     mMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker")); 
    } 
} 

我試圖從剛剛延長Fragment噸改變ListFragment.java姑娘o FragmentActivity,然後是適配器使用的類型。以及List<FragmentActivity> mFragments,但我遇到了與getItem()的麻煩。

一旦我作出了上述變化,像這樣:

@Override 
    public FragmentActivity getItem(int position) { 
     return mFragments.get(position); 
    } 

有不兼容類型的衝突。 getItem(position) from ... MainActivity.AdaptergetItem(position)發生衝突從... support.FragmentPagerAdapter

請在此選項卡內顯示/建議我以最佳方式獲取此地圖FragmentActivity。

回答

1

您不能在ViewPager中使用活動。活動可以包含視圖,但視圖不能包含活動。

第一步是將您的地圖代碼完全封裝在一個片段中。好消息是你非常接近 - 你有一個MapFragment,你在活動中唯一真正做的就是添加一個標記。

將標記碼移動到MapFragment的片段中,並在FragmentPagerAdapter中使用您的MapFragment

+0

感謝您的回覆,並承擔着我,因爲我還是地圖新手。所以你建議我創建一個新的類,例如_Map.java_。在那個類的內部,我需要'onCreate'等,然後所有的地圖函數都會在那裏發生?然後回到_MapsActivity.java_中,我會拋棄'setUpMap'和'setUpMapIfNeeded'方法,但是保留'onCreate' /'onResume'方法? – erp

+0

幾乎 - 我說完全拋棄'MapsActivity',因爲你不能在你的ViewPager中使用它。你基本上用一個擴展了'MapFragment'的新類來代替你的'MapsActivity', –

+0

好吧,當我嘗試這個時,我嘗試添加'adapter.addFragment(new MapFrag(),「Map」)'我得到一個錯誤,它「找到了com.blah。MapFrag'但需要'android.support.v4.ap.Fragment'「 – erp

相關問題