acr*_*spo 4 android android-fragments fragmenttransaction material-design android-textinputlayout
我已经搜索了一段时间,但我认为大多数报告的错误(并且有很多)android.support.design.widget.TextInputLayout与这个略有不同。至少,我已经解决了大多数其他错误,但在这个问题上很挣扎。我目前Fragment在我的活动中有几个TextInputLayout这样的
<android.support.design.widget.TextInputLayout
android:id="@+id/input1"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint1"
android:inputType="numberSigned" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:id="@+id/input2
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint2"
android:inputType="numberSigned"/>
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:id="@+id/input3"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint3"
android:inputType="numberSigned">
</android.support.design.widget.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)
并且,在满足一些外部条件(不重要)之后,我打开并显示隐藏上述片段的另一个片段(100% 屏幕)。如果您想知道这个新片段要求我在特定情况下需要的一些额外字段。这是处理新创建的代码Fragment:
Fragment2 fragment2 = new Fragment2();
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction()
.replace(((ViewGroup) getView().getParent()).getId(), fragment2);
transaction.addToBackStack(Fragment1.class.getSimpleName());
transaction.commit();
Run Code Online (Sandbox Code Playgroud)
但问题是,当返回(按下后退按钮、工具栏/操作栏主页按钮等)到第一个片段时。我所有的人都TextInputLayouts失去了插入他们的文字。这真的很烦人,而且在专门使用 时并没有发生EditText,就像我们之前的 Material Design 过渡一样。
此外,如果不是使用 a 替换片段FragmentTransaction,而是开始一个新的Activity. 不幸的是,这并不是我们真正想要的。我们不应该需要做这种解决方法。
有任何想法吗?有人遇到过这种情况吗?
发布我的“答案”,这确实是一种解决方法,可能不会证明对所有人有用或令人满意,但至少它对我很有帮助。
这显然是与新的错误TextInputLayout,不处理得非常好savedInstanceState做的一更换或拆除时FragmentTransaction。EditText以前做得很好。
我落得这样做是没有使用FragmentTransaction#replace()(因为我追踪的问题去除片段的),而是使用的组合FragmentTransaction#hide()和FragmentTransaction#add()。这提供了完全相同的视觉效果和行为,并且不存在上述错误的问题。显然,它只有一个固有的缺点,即不能删除片段:片段资源不能被释放/用于其他目的。如果内存不足或您的片段是怪物,这可能会导致麻烦。但至少在我的情况下,它没有造成任何麻烦。
总而言之,这就是我最终用作片段交易的内容:
Fragment2 fragment2 = new Fragment2();
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
transaction.add(((ViewGroup) getView().getParent()).getId(), fragment2);
transaction.hide(Fragment1.this);
transaction.addToBackStack(Fragment1.class.getSimpleName());
transaction.commit();
Run Code Online (Sandbox Code Playgroud)
希望它可以帮助你们中的一些人!
| 归档时间: |
|
| 查看次数: |
820 次 |
| 最近记录: |