有没有setContentView可以做FragmentTransaction?

时间:2015-01-16 18:31:11

标签: android eclipse android-layout android-fragments fragmenttransaction

我正在开发一款使用Google Map API的Android应用。我需要设置一个电源按钮键监听器和窗口的几个标志。

我已经创建了一个自定义的SupportMapFragment类,我在FrameLayout中动态加载MapFragment。

activity_main.xml如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:tools="http://schemas.android.com/tools"
      xmlns:map="http://schemas.android.com/apk/res-auto"
      android:id="@+id/mapContainer"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      tools:context=".MainActivity" >
<FrameLayout
    android:id="@+id/mapPlaceholder"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
</LinearLayout>

我通过代码获取activity_main膨胀视图:

LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ViewGroup mainView = (ViewGroup) inflater.inflate(R.layout.activity_main, null);

在此之后,我设置了监听器:

mainView.setFocusableInTouchMode(true);
mainView.setOnKeyListener(new OnKeyListener() 
{
       @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) 
        {
            //STUFF
        }
    });

我添加了这样的视图:

final WindowManager myWindowManager = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
myWindowManager.addView(mainView, viewParams);

我没有在onCreate的任何地方使用setContentView,所以这就是问题所在。此时我需要通过FragmentTransaction在FrameLayout中加载GoogleMap,但FragmentTransaction需要setContentView才能工作。这段代码:

FrameLayout mapPlaceholder = (FrameLayout) mainView.findViewById(R.id.mapPlaceholder);

if(mapPlaceholder != null) {
    mapFragment = GoogleMapFragment.newInstance();

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(mapPlaceholder.getId(), mapFragment, GoogleMapFragment.class.getName());
    ft.commit();
}

启动应用程序时返回此错误:

01-16 18:22:20.263: E/AndroidRuntime(7755): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.app/com.example.app.MainActivity}: java.lang.IllegalArgumentException: No view found for id 0x7f070018 (com.example.app:id/mapPlaceholder) for fragment GoogleMapFragment{b666a7d #0 id=0x7f070018 com.example.app.GoogleMapFragment}

有没有人知道如何在没有setContentView的情况下使用FragmentTransaction(或添加片段)?

0 个答案:

没有答案