AndroidStudio:为什么LayoutInflater会切换回旧活动?

时间:2017-03-15 00:29:48

标签: android android-layout android-studio android-fragments android-activity

我一直在Stack Overflow上寻找类似的问题,但没有运气。我有我的第一个活动,MapsActivity。我希望我的第二个活动AboutActivity出现在MapsActivity布局的FrameLayout中,所以我使用了LayoutInflater。当我运行应用程序时,我会看到我的AboutActivity大约半秒钟,然后它会快速更改回Map​​Activity。我在logcat上没有任何错误,并且Manifest文件中列出了这两个活动。

这是我的MapsActivity(仅包含相关部分)。我的谷歌地图在片段内(我希望我的第二个活动出现在那里)。我有一个菜单按钮,其中一个按钮指向第二个活动。:

let chart = Chart(frame: CGRect(x: 0, y: 0, width: self.popUpView.bounds.size.width, height: self.popUpView.bounds.size.height / 2))

这是我的AboutActivity,第二项活动。 activity_about仅显示一秒钟。我希望它出现在地图的位置。

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
private String[] menuOptions;
private DrawerLayout myDrawerLayout;
private ListView myList;
//    private Fragment menuFragment;
private MapFragment mMapFragment;

private GoogleMap mMap;

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

    if (findViewById(R.id.content_frame)!=null){
        if (savedInstanceState!=null){
            return;
        }
        // to add fragment dynamically, create new instance- add to frame layout
        mMapFragment= MapFragment.newInstance();
        FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
        fragmentTransaction.add(R.id.content_frame, mMapFragment);
        fragmentTransaction.commit();

        //make menu from array indices
        menuOptions = getResources().getStringArray(R.array.menu_array);
        myDrawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
        myList= (ListView)findViewById(R.id.left_drawer);
        //adapter for list view
        myList.setAdapter(new ArrayAdapter<String>(this, R.layout.drawer_list_item, menuOptions));
        //list's click listener
        myList.setOnItemClickListener(new DrawerItemClickListener());

        Button menuButton = (Button) findViewById(R.id.menuButton);
        menuButton.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){
                myDrawerLayout.openDrawer(Gravity.LEFT);
            }
        });

...
 private void selectItem(int position){
    switch(position) {
        case 0:
            //Highlight selected item
            myList.setItemChecked(position, true);
            myDrawerLayout.closeDrawer(myList);
            break;
        case 1:
            //about
            Intent switchIntent = new Intent(getApplicationContext(), AboutActivity.class);
            startActivity(switchIntent);
            break;

这是我的activity_maps.xml,它有一个地图和一个FrameLayout,我希望我的其他活动出现(这样我也可以在每个活动中都有ListView菜单):

public class AboutActivity extends MapsActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_about);
    FrameLayout frame = (FrameLayout) findViewById(R.id.content_frame);
    getLayoutInflater().inflate(R.layout.activity_about, frame);
}

2 个答案:

答案 0 :(得分:0)

公共类AboutActivity扩展 FragmentActivity ,并尝试使用片段。

&#34; main&#34;布局创建一个:

<FrameLayout
    android:id="@+id/content_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <Button
        android:id="@+id/menuButton"
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:text="Menu" />
</FrameLayout>
mainActivity中的

会将创建的片段膨胀到frameLayout。

答案 1 :(得分:0)

如果您希望在这两项活动中使用ButtonListView,为什么不使用AboutFragment代替AboutActivity。当您在ListView中单击aboutButton时,只需替换FrameLayout中的片段显示。您必须在FrameLayout之外让您menuButton

<强> activity_xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!-- The main content view -->
    <LinearLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        android:orientation="vertical">
     <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_weight="1"
        android:layout_height="0dp" />

    <Button
            android:id="@+id/menuButton"
            android:layout_width="100dp"
            android:layout_height="50dp"
            android:text="Menu" />
    </LinearLayout>


        <!-- The navigation drawer -->
    <ListView android:id="@+id/left_drawer"
            android:layout_width="240dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:choiceMode="singleChoice"
            android:divider="@android:color/transparent"
            android:dividerHeight="0dp"
            android:background="#111">
    </ListView>

</android.support.v4.widget.DrawerLayout>