我是Android开发的初学者。我正在创建一个小应用程序,我在其中调用来自单个活动的两个片段。 活动 - >片段1->片段2.
对片段1,片段1到片段2的活动。 我想知道我是如何直接将片段2直接调用到Activity。
我在片段2中给出按钮,点击我想要进入活动的那个按钮。
答案 0 :(得分:0)
活动已经存在。您的活动是托管片段的活动,即假设所有片段都是全屏碎片,当您调用fragment1时,您的活动将删除当前片段(如果有)并将其替换为fragment1,当您调用fragment2时,fragment1将替换为fragment2和等等。
如果您只想查看活动的布局(在大多数情况下只是一个白色的屏幕),您必须删除所有碎片,为此,将其添加到您的按钮onClick:
getActivity().getFragmentManager().popBackStack(1, FragmentManager.POP_BACK_STACK_INCLUSIVE);
答案 1 :(得分:0)
根据你的问题,我注意到你仍然需要阅读片段。 你不能从片段中去活动,因为碎片是 是一个活动的一部分,它有自己的生命周期,接收自己的输入事件,你可以在活动运行时添加或删除它们(有点像"子活动"你可以在不同的重用活动)。
虽然您可以替换片段并在同一个活动中使用不同的片段。 你可以这样做:
首先在主xml中使用你要膨胀的布局:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/frgContainer"
android:layout_margin="20dp"
android:background="#00e6ff">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn"
android:text="btn"
/>
</LinearLayout>
创建2个新活动,这些活动将成为我们的xml文件片段,您可以添加任意内容:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical"
tools:context="com.example.hackeru.mydynamicfragment.Login">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="User Name"
android:id="@+id/txtLoginUser"
android:layout_marginLeft="20sp"
android:layout_marginRight="20sp"
android:layout_marginTop="80dp"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Password"
android:id="@+id/txtLoginPass"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnLogin"
android:text="Login"
/>
</LinearLayout>
覆盖片段上的onCreate方法
public class Login extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.activity_login,container,false);
}
4.在main中的onClick方法中使用fragmentTransaction来替换或添加当前布局与您创建的片段:
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fragmentManager =getFragmentManager();
// we must handle the callback fragment process
FragmentTransaction fragmentTransaction =
fragmentManager.beginTransaction();
Login loginFragment = new Login();
fragmentTransaction.add(R.id.frgContainer,loginFragment);
// fragmentTransaction.replace if there is another fragment you
// wish to replace
fragmentTransaction.commit();
}
请阅读: