有没有办法在片段中显示活动

时间:2015-02-06 21:44:19

标签: java android xml android-fragments

我在地图应用程序中使用导航抽屉,我设法在主页面上显示地图。我遇到的问题是我无法将地图片段(在布局“xml”中)连接到MapsActivity(java文件)。

我尝试使用MapsActivity extends Fragment代替MapsActivity extends FragmentActivity,但当然这不起作用。

主要的xml布局:

<!-- A DrawerLayout is intended to be used as the top-level content view using match_parent for both width and height to consume the full space available. -->
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<!-- As the main content view, the view below consumes the entire
     space available using match_parent in both dimensions. -->
<FrameLayout android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


 <!-- *****The problem I am having is in the following fragment could not link it to the MapsActivity-->
 <fragment
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/map"
        tools:context=".MapsActivity"
        android:name="com.google.android.gms.maps.SupportMapFragment"/>


</FrameLayout>


<!-- android:layout_gravity="start" tells DrawerLayout to treat
     this as a sliding drawer on the left side for left-to-right
     languages and on the right side for right-to-left languages.
     If you're not building against API 17 or higher, use
     android:layout_gravity="left" instead. -->
<!-- The drawer is given a fixed width in dp and extends the full height of
     the container. -->
<fragment android:id="@+id/navigation_drawer"
    android:layout_width="@dimen/navigation_drawer_width"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:name="com.example.famfelimban.mydiet.NavigationDrawerFragment"
    tools:layout="@layout/fragment_navigation_drawer" />

但是,我有一个单独的地图xml布局,工作正常 activity_maps.xml,可以正常使用MapsActivity

<fragment
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/map"
tools:context=".MapsActivity"
android:name="com.google.android.gms.maps.SupportMapFragment"/>

MapsActivity

    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);
        setUpMapIfNeeded();
    }

    @Override
    protected void onResume() {

    }

    private void setUpMapIfNeeded() {

    }

    private void setUpMap() {

    }
}

2 个答案:

答案 0 :(得分:0)

不,ActivityFragment的持有者,Fragment无法保留活动。

这个问题可能很有意思:How to show different Activities in Fragment implementation?

答案 1 :(得分:0)

您要在此处执行的操作是将Activity代码移植到Fragment。这并不难,片段的生命周期几乎相同。唯一的区别是,您需要在View中抓取并修改onCreate onCreateView中的static newInstance(),而您需要实施FrameLayout方法。

将xml中的FragmentManager留空。只有那里Activity才能将片段膨胀。代码的两处更改

@Override protected void onStart() { super.onStart(); Fragment mapFragment = MapFragment.newInstance(/*args*/); getFragmentManager() //you may need getSupportFragmentMananger() .beginTransaction() .replace(R.id.container, mapFragment) .commit() //this inflates the Fragment into the FrameLayout }

中的

Fragment

并制作一个与您的Activity

相似的public class MapFragment extends Fragment { ... public MapFragment() {/*should be empty*/} ... public static MapFragment newInstance(/*args*/) { Fragment fragment = new MapFragment(); Bundle args = new Bundle(); //put whatever information you need for your activity to run here fragment.setArguments(args); return fragment; } ... @Overide public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { //this basically takes the place of onCreate in the Activity version View root = inflater.inflate(R.layout.fragment_map, parent); View yourView = root.findViewById(R.id.your_view); ... return root; } ... }
{{1}}
祝你好运。