这似乎是一个非常基本的问题,我很尴尬地问这个问题,但是我对Fragment的学习曲线感到沮丧,以至于暴露了我的无知。

教科书中的一个例子,它开了很多角,使它们难以扩展,即使它们即使起作用,也没有单击按钮。 MainActivity只需加载FragmentA。好的,保持基本。我明白了。

因此,我在MainActivity中添加了一个按钮以单击以加载FragmentA,但是该按钮在FragmentA屏幕上显示,类似于这样(不是实际的屏幕截图,而是关闭的):

java - 我希望我的Android Fragment覆盖MainActivity屏幕(我不想看到任何MainActivity文本,按钮等)-LMLPHP

我该如何预防?我应该使用第二个Activity而不是Fragment吗?由于这项工作将在更大的项目中使用,因此我不想做任何非最佳实践的事情。我意识到Fragment的主要用途是在足够大的设备上启用并排“屏幕”。那不是我想要的,但是可以用Fragment完成我想要的,不是吗?

MainActivity.java

public class MainActivity extends Activity {

  @Override protected void  onCreate(Bundle savedInstanceState)
  {
                          super.onCreate(       savedInstanceState);

    setContentView(R.layout.activity_main);

   }

  public void btnLoadFragmentAByClick(View view)
  {
    FragmentA fragmentA;
                                                          fragmentA = new FragmentA();

    FragmentTransaction ft ;
                        ft = getFragmentManager().beginTransaction();
                        ft.replace(R.id.layout_container, fragmentA);
                        ft.addToBackStack("example");
                        ft.commit();
  }
}


FragmentA.java

public class FragmentA extends Fragment
{
    @Override
    public View onCreateView(LayoutInflater _inflater,
                           ViewGroup                          _container,
                           Bundle         _savedInstanceState)
  {

        return _inflater.inflate(R.layout.fragment_a,
                                                              _container,
                             false);

    }
}


activity_main.xml

<RelativeLayout
    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"
    tools:context           =".MainActivity" >

   <LinearLayout
       android:id           ="@+id/layout_container"
       android:orientation  ="vertical"
       android:layout_width ="wrap_content"
       android:layout_height="wrap_content"
       >
   </LinearLayout>

    <Button
        android:id           ="@+id/btnLoadFragmentA"
        android:text         ="Load Fragment A"
        android:onClick="btnLoadFragmentAByClick"
        android:layout_width ="wrap_content"
        android:layout_height="wrap_content"
        />

</RelativeLayout>


fragment_a.xml

<RelativeLayout
    xmlns:android           ="http://schemas.android.com/apk/res/android"
    android:layout_width    ="match_parent"
    android:layout_height   ="match_parent" >

    <TextView
        android:layout_width    ="wrap_content"
        android:layout_height   ="wrap_content"
        android:text            ="Layout for fragment A"
        android:textAppearance  ="?android:attr/textAppearanceLarge"
        >
    </TextView>

</RelativeLayout>


编辑

我意识到我可以在加载MainActiviy之前隐藏FragmentA按钮(和其他任何对象),并在返回后显示它们,但是我希望获得一两行的“修复”。

最佳答案

我该如何预防?


好吧,在某种程度上,您与片段无关。

activity_main.xmlButton浮动在您用于片段容器的LinearLayout(???)上方。如果您不希望Button漂浮在片段容器的顶部,请修复布局文件,使Button不能漂浮在片段容器的顶部。


  我意识到我可以在加载FragmentA之前隐藏MainActiviy按钮(和其他任何对象),并在返回后显示它们,但是我希望获得一两行的“修复”。


使用片段进行全UI替换的典型解决方案是将所有内容都放在片段中。您的replace()将用替换内容替换原始片段。因此,在这种情况下,您的Button将由一个片段管理,而单击Button将会将该片段与另一个片段replace()一起管理。鉴于您的FragmentTransaction具有addToBackStack(),按BACK将摆脱替换片段,并使您返回到您的Button片段。

10-08 14:29