- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我开发了一个应用程序,它使用 fragment 作为 fragment 的一部分。
public class LoginFragment extends Fragment
EditTextWithCameraButtonFrag userNameFrag;
EditTextWithCameraButtonFrag passwordFrag;
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
userNameFrag = (EditTextWithCameraButtonFrag)getChildFragmentManager()
.findFragmentById(R.id.fragment_username);
passwordFrag = (EditTextWithCameraButtonFrag) getChildFragmentManager()
.findFragmentById(R.id.fragment_password);
EditTextWithCameraButtonFrag
是 Fragment 的子类型。这段代码就像一个魅力,运行在 android 5.1.1 上。但是,在 Android 4.4.2 上运行它会返回 userNameFrage 和 passwordFrag 为 null。看来,返回的 Child FragmentManager 没有找到字段。
在 4.4.3 中使用 getChildFragmentManager()
时有什么需要考虑的吗?
提前致谢!
编辑:这是主要 fragment 的 XML:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/huge"
android:orientation="vertical" >
<TextView
android:id="@+id/login_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/activity_vertical_margin"
android:gravity="center"
android:textColor="@color/white"
android:textSize="40dp" />
<fragment
android:id="@+id/fragment_username"
android:name="com.example.app.fragments.EditTextWithCameraButtonFrag"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<fragment
android:id="@+id/fragment_password"
android:name="com.example.app.fragments.EditTextWithCameraButtonFrag"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/login_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/huge"
android:layout_marginStart="@dimen/huge"
android:layout_marginTop="@dimen/normal"
android:padding="@dimen/half"
android:text="Login" />
</LinearLayout>
这是子 fragment 的:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/editText_with_button_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<EditText
android:id="@+id/text_input_field"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:alpha="0.75"
android:background="@drawable/edit_text_login_top"
android:inputType="text"
android:padding="@dimen/normal" />
<Button
android:id="@+id/scan_text_view"
android:layout_width="wrap_content"
android:background="@android:color/transparent"
android:layout_height="wrap_content"
android:layout_alignEnd="@+id/text_input_field"
android:layout_alignTop="@+id/text_input_field"
android:layout_alignBottom="@+id/text_input_field"
/>
</RelativeLayout>
最佳答案
我刚刚解决了它 - 有点。经过大量阅读后,似乎可以通过 XML 声明嵌套 fragment ,但这不是最佳实践。
所以我决定在 XML 中包含 FrameLayout
,并添加嵌套的通过 FragmentTransaction
的 fragment 。
<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"
android:gravity="center" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/huge"
android:orientation="vertical" >
<TextView
android:id="@+id/login_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/activity_vertical_margin"
android:gravity="center"
android:textColor="@color/white"
android:textSize="40dp" />
<FrameLayout
android:id="@+id/fragment_username"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@+id/fragment_password"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/login_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/huge"
android:layout_marginStart="@dimen/huge"
android:layout_marginTop="@dimen/normal"
android:padding="@dimen/half"
android:text="Login" />
</LinearLayout>
</RelativeLayout>
在主 fragment 的 onCreate 中:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// create userNameFrag
EditTextWithCameraButtonFrag userfragment = new EditTextWithCameraButtonFrag();
getChildFragmentManager().beginTransaction().replace(R.id.fragment_username, userfragment).commit();
// create passwordFrag
EditTextWithCameraButtonFrag passfragment = new EditTextWithCameraButtonFrag();
getChildFragmentManager().beginTransaction().replace(R.id.fragment_password, passfragment).commit();
}
这似乎工作得很好而且 - 另一个优点 - 我也摆脱了 the duplicate id bug .
关于android - ChildFragmentManager.findFragmentByID() 在 android 4.4.2 上返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32373278/
这是我的问题,我有一个 Activity,其中包括一个使用 (FragmentStatePagerAdapter) 的 ViewPager 的 Fragment,当 Activity 第一次加载时一切
我遇到了一个疯狂的小“错误”,或者我只是做错了什么。我正在尝试获取对 fragment 内 fragment 的引用。所以我们有 ParentFragment,它是 MainActivity 的子项。
因此,当我尝试将某些内容放入 fragment 的子 fragment 管理器中时,我偶然发现了可怕的 Can not perform this action after onSaveInstance
我的应用建立在许多 fragment 之上,我用水平滑动动画改变了这些 fragment 。一些 fragment 包含带有 FragmentStatePagerAdapter 的 ViewPager
我有一个托 pipe fragment 的父 fragment 。我对我的应用程序进行了压力测试,通过在开发人员选项中选中“不保留 Activity ”,然后按下主页按钮来强制终止它。 可以看到父 f
我尝试使用 getChildFragmentManager() 在 viewpager 的另一个 fragment 内添加一个 fragment 。我收到以下错误, java.lang.Illeg
我正在尝试在我的 ViewPager 中恢复一个 fragment 以解决一些问题,并编写了一些在正常使用时可以完美运行的代码,但是当我尝试使其成为一个通用函数以重用它时,它不起作用。 无论我尝试在
我想将一个 fragment 作为子添加到另一个 fragment 我正在使用 ChildFragmentManager 这是我的 ChildFragmentManagerActivity.java
编辑 2 我现在设法摆脱了使用这里的技巧 https://code.google.com/p/android/issues/detail?id=42601#c10 的错误所以这就是为什么我最后一次编辑
我开发了一个应用程序,它使用 fragment 作为 fragment 的一部分。 public class LoginFragment extends Fragment EditTextWit
我是一名优秀的程序员,十分优秀!