这似乎是一个非常基本的问题,我很尴尬地问这个问题,但是我对Fragment
的学习曲线感到沮丧,以至于暴露了我的无知。
教科书中的一个例子,它开了很多角,使它们难以扩展,即使它们即使起作用,也没有单击按钮。 MainActivity
只需加载FragmentA
。好的,保持基本。我明白了。
因此,我在MainActivity
中添加了一个按钮以单击以加载FragmentA
,但是该按钮在FragmentA
屏幕上显示,类似于这样(不是实际的屏幕截图,而是关闭的):
我该如何预防?我应该使用第二个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.xml
的Button
浮动在您用于片段容器的LinearLayout
(???)上方。如果您不希望Button
漂浮在片段容器的顶部,请修复布局文件,使Button
不能漂浮在片段容器的顶部。
我意识到我可以在加载FragmentA之前隐藏MainActiviy按钮(和其他任何对象),并在返回后显示它们,但是我希望获得一两行的“修复”。
使用片段进行全UI替换的典型解决方案是将所有内容都放在片段中。您的replace()
将用替换内容替换原始片段。因此,在这种情况下,您的Button
将由一个片段管理,而单击Button
将会将该片段与另一个片段replace()
一起管理。鉴于您的FragmentTransaction
具有addToBackStack()
,按BACK将摆脱替换片段,并使您返回到您的Button
片段。