如何使用动画一个接一个地显示包含多个片段的对话碎片?
我的用例是:
任何指针都会有所帮助.
先感谢您.
这是我正在使用的基本对话片段
public class BaseDialogFragment extends DialogFragment {
public BaseDialogFragment () {
}
public static BaseDialogFragment newInstance(String title) {
BaseDialogFragment frag = new BaseDialogFragment ();
Bundle args = new Bundle();
args.putString("title", title);
frag.setArguments(args);
return frag;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment, container);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
getDialog().getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
}
}
Run Code Online (Sandbox Code Playgroud)
这是行为的方式.BottomNavigation活动正在显示带流的对话框.下一个/上一个对话框带有滑入/导出导航.
我也对其他建议持开放态度,例如对话主题活动
小智 8
据我了解,您希望有一个父对话框片段来管理两个子片段。为此,您必须遵循这些步骤。
让我们从第一步开始。我们将创建一个容器对话框片段:
class ContainerDialogFragment extends DialogFragment {
@Override
public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) {
return inflater.inflate(R.layout.container_fragment, container, false);
}
}
Run Code Online (Sandbox Code Playgroud)
我们的container_fragment xml如下所示:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Run Code Online (Sandbox Code Playgroud)
然后我们创建两个子片段:
class ChildFragment1 extends Fragment {
//...the content is up to you...
}
Run Code Online (Sandbox Code Playgroud)
和
class ChildFragment2 extends Fragment {
//...the content is up to you...
}
Run Code Online (Sandbox Code Playgroud)
我们将第一个片段添加到容器对话框片段中:
class ContainerDialogFragment extends DialogFragment {
@Override
public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) {
return inflater.inflate(R.layout.container_fragment, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
ChildFragment1 childFragment1 = new ChildFragment1();
transaction.replace(R.id.fragment_container, childFragment1);
transaction.commit();
}
}
Run Code Online (Sandbox Code Playgroud)
现在我们必须添加一个接口以在父片段和子片段之间进行通信以替换它:
class ChildFragment1 extends Fragment {
interface ChildFragment1Listener {
void onButtonPressed();
}
//you have to call this method when user pressed to button
void onButtonPressed() {
ChildFragment1Listener listener = (ChildFragment1Listener) getParentFragment();
listener.onButtonPressed();
}
}
Run Code Online (Sandbox Code Playgroud)
最后,我们必须在容器对话框片段中实现此接口,并添加替换功能:
class ContainerDialogFragment extends DialogFragment implements ChildFragment1.ChildFragment1Listener {
@Override
public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) {
return inflater.inflate(R.layout.container_fragment, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
ChildFragment1 childFragment1 = new ChildFragment1();
transaction.replace(R.id.fragment_container, childFragment1);
transaction.commit();
}
@Override
void onButtonPressed() {
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
//Out of simplicity, i am creating ChildFragment2 every time user presses the button.
//However, you should keep the instance somewhere to avoid creation.
ChildFragment2 childFragment2 = new ChildFragment2();
transaction.replace(R.id.fragment_container, childFragment2);
//You can add here as well your fragment in and out animation how you like.
transaction.addToBackStack("childFragment2");
transaction.commit();
}
}
Run Code Online (Sandbox Code Playgroud)
而已。
| 归档时间: |
|
| 查看次数: |
1499 次 |
| 最近记录: |