这似乎是一个非常基本的问题,我都不好意思问它,但我对我的 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>
编辑
我意识到我可以在加载 FragmentA
之前隐藏 MainActiviy
按钮(以及任何其他对象)并在返回后显示它们,但我希望有一个或多个- 两行“修复”。
最佳答案
How do I prevent that?
嗯,在某种程度上,你不需要,因为这与 fragment 无关。
您的 activity_main.xml
的 Button
float 在您用于 fragment 容器的 LinearLayout
(???) 之上。如果您不希望 Button
float 在 fragment 容器的顶部,请修复布局文件以使 Button
float 在 fragment 容器的顶部。
I realize that I could hide the MainActiviy button (and any other objects) before loading FragmentA and show them after returning, but I was hoping for a one-or-two-line "fix".
使用 fragment 替换完整 UI 的典型解决方案是将所有内容都放在 fragment 中。您的 replace()
会将原始 fragment 替换为替换 fragment 。因此,在这种情况下,您的 Button
将由一个 fragment 管理,单击 Button
会将该 fragment replace()
替换为另一个 fragment 。鉴于您的 FragmentTransaction
具有 addToBackStack()
,按 BACK 将删除替换 fragment 并返回到 Button
fragment 。
关于java - 我希望我的 Android fragment 覆盖 MainActivity 屏幕(我不想看到任何 MainActivity 文本、按钮等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32321528/