这似乎是一个基本的问题,我很尴尬地问它,但我对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
按钮(以及任何其他对象)并在返回后显示它们,但我希望能够进行一两线修复”。
答案 0 :(得分:2)
我该如何预防?
嗯,在某种程度上,你不会,因为这与片段无关。
您的activity_main.xml
将Button
浮动在您用于片段容器的LinearLayout
(???)之上。如果您不希望Button
浮动在片段容器的顶部,则修复布局文件,使Button
浮动在片段容器的顶部。
我意识到我可以在加载FragmentA之前隐藏MainActiviy按钮(以及任何其他对象)并在返回后显示它们,但我希望能够进行一两线修复#34;。
使用片段进行全UI替换的典型解决方案是将所有内容都包含在片段中。您的replace()
会替换原始片段。因此,在这种情况下,您的Button
将由一个片段管理,并点击Button
将replace()
该片段与另一个片段进行管理。鉴于您的FragmentTransaction
已addToBackStack()
,按BACK将取消替换片段并返回您的Button
片段。