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

时间:2015-08-31 23:46:11

标签: java android android-fragments

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

教科书中的一个例子是削减很多角落,使得扩展它们很困难,如果它们工作的话,没有按钮可以点击; MainActivity只需加载FragmentA。好的,保持基本。我知道了。

所以我添加了一个按钮MainActivity点击加载FragmentA,但按钮显示在FragmentA屏幕上,有点像这样(不是实际的屏幕截图,但关闭):

enter image description here

如何防止这种情况?我应该使用秒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按钮(以及任何其他对象)并在返回后显示它们,但我希望能够进行一两线修复”。

1 个答案:

答案 0 :(得分:2)

  

我该如何预防?

嗯,在某种程度上,你不会,因为这与片段无关。

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

  

我意识到我可以在加载FragmentA之前隐藏MainActiviy按钮(以及任何其他对象)并在返回后显示它们,但我希望能够进行一两线修复#34;。

使用片段进行全UI替换的典型解决方案是将所有内容都包含在片段中。您的replace()会替换原始片段。因此,在这种情况下,您的Button将由一个片段管理,并点击Buttonreplace()该片段与另一个片段进行管理。鉴于您的FragmentTransactionaddToBackStack(),按BACK将取消替换片段并返回您的Button片段。

相关问题