自动隐藏工具栏不会出现在新片段上
Auto-hided Toolbar does not reappear on new Fragment
我有一个 activity 应用程序实现了(到目前为止)三个不同的片段:
MainActivity
- 负责片段之间的切换
HomeFragment
- 应用程序的主屏幕
TasksFragment
- 包括带有 CardView 的 RecyclerView 和在垂直滚动时自动隐藏工具栏
AssesmentFragment
-
(主要)问题:
在 TasksFragment 中,当滚动到 RecyclerView 底部后隐藏 Toolbar 时,按下 CardView 上的 Button 并创建 AssessmentFragment 并滑入。
- 工具栏现在隐藏在新的 AssessmentFragment 中(因为 RecyclerView 中的自动隐藏工具栏)
- 快速修复后 (见下文) 后退按钮无法按下!
我糟糕的快速修复:
public class TasksAdapter extends
RecyclerView.Adapter<TasksAdapter.ViewHolder> {
(... details omitted ...)
viewHolder.messageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (position) {
case 0:
//http://stackandroid.com/tutorial/custom-dialog-with-user-input/
Log.i("Press", "" + position);
break;
case 1:
Log.i("Press", "" + position);
break;
case 2:
Log.i("Press", "" + position);
MainActivity mainActivity = (MainActivity) mContext;
mainActivity.moveToolbarUp();
mainActivity.taskToAssessment();
break;
}
});
}
MainActivity
public void moveToolbarUp() {
TranslateAnimation anim = new TranslateAnimation(0, 0, -50, 122);
anim.setDuration(400);
toolbar.startAnimation(anim);
anim.setFillAfter(true);
//toolbar.setTranslationY(0);
}
public void taskToAssessment() {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.setCustomAnimations(R.anim.left_in, R.anim.left_out);
AssessmentFragment af = new AssessmentFragment();
ft.replace(R.id.mainFragment, af);
ft.addToBackStack(null);
ft.commit();
}
看起来像这样:
一开始看起来还不错,但正如您所见,新 Fragment 中的后退按钮不可按,而且当返回到之前的 Fragment 时,工具栏现在的位置完全错误。
有没有人知道如何改进这个?我想:随时可以访问工具栏,并在隐藏时重新出现。必须有更好的方法来做到这一点。当更改为新片段时,我希望看到一些替代方法来处理从 recyclerview 滚动时隐藏的工具栏。肯定有人遇到过类似的问题!
如果需要,我当然会提供更多代码片段!谢谢。
通过添加
修复
toolbar.animate().translationY(toolbar.getTop()).setInterpolator(new AccelerateInterpolator()).start();
在 MainActivity
的 taskToAssessment()
:
public void taskToAssessment() {
toolbar.animate().translationY(toolbar.getTop()).setInterpolator(new AccelerateInterpolator()).start();
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.setCustomAnimations(R.anim.left_in, R.anim.left_out);
AssessmentFragment af = new AssessmentFragment();
ft.replace(R.id.mainFragment, af);
ft.addToBackStack(null);
ft.commit();
}
我有一个 activity 应用程序实现了(到目前为止)三个不同的片段:
MainActivity
- 负责片段之间的切换
HomeFragment
- 应用程序的主屏幕
TasksFragment
- 包括带有 CardView 的 RecyclerView 和在垂直滚动时自动隐藏工具栏
AssesmentFragment
-
(主要)问题:
在 TasksFragment 中,当滚动到 RecyclerView 底部后隐藏 Toolbar 时,按下 CardView 上的 Button 并创建 AssessmentFragment 并滑入。
- 工具栏现在隐藏在新的 AssessmentFragment 中(因为 RecyclerView 中的自动隐藏工具栏)
- 快速修复后 (见下文) 后退按钮无法按下!
我糟糕的快速修复:
public class TasksAdapter extends
RecyclerView.Adapter<TasksAdapter.ViewHolder> {
(... details omitted ...)
viewHolder.messageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (position) {
case 0:
//http://stackandroid.com/tutorial/custom-dialog-with-user-input/
Log.i("Press", "" + position);
break;
case 1:
Log.i("Press", "" + position);
break;
case 2:
Log.i("Press", "" + position);
MainActivity mainActivity = (MainActivity) mContext;
mainActivity.moveToolbarUp();
mainActivity.taskToAssessment();
break;
}
});
}
MainActivity
public void moveToolbarUp() {
TranslateAnimation anim = new TranslateAnimation(0, 0, -50, 122);
anim.setDuration(400);
toolbar.startAnimation(anim);
anim.setFillAfter(true);
//toolbar.setTranslationY(0);
}
public void taskToAssessment() {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.setCustomAnimations(R.anim.left_in, R.anim.left_out);
AssessmentFragment af = new AssessmentFragment();
ft.replace(R.id.mainFragment, af);
ft.addToBackStack(null);
ft.commit();
}
看起来像这样:
一开始看起来还不错,但正如您所见,新 Fragment 中的后退按钮不可按,而且当返回到之前的 Fragment 时,工具栏现在的位置完全错误。
有没有人知道如何改进这个?我想:随时可以访问工具栏,并在隐藏时重新出现。必须有更好的方法来做到这一点。当更改为新片段时,我希望看到一些替代方法来处理从 recyclerview 滚动时隐藏的工具栏。肯定有人遇到过类似的问题!
如果需要,我当然会提供更多代码片段!谢谢。
通过添加
修复toolbar.animate().translationY(toolbar.getTop()).setInterpolator(new AccelerateInterpolator()).start();
在 MainActivity
的 taskToAssessment()
:
public void taskToAssessment() {
toolbar.animate().translationY(toolbar.getTop()).setInterpolator(new AccelerateInterpolator()).start();
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.setCustomAnimations(R.anim.left_in, R.anim.left_out);
AssessmentFragment af = new AssessmentFragment();
ft.replace(R.id.mainFragment, af);
ft.addToBackStack(null);
ft.commit();
}