【问题标题】:In android Studio, I want when i click on button , next activity/fragment should come from right side在 android Studio 中,我希望当我点击按钮时,下一个活动/片段应该来自右侧
【发布时间】:2017-08-08 14:43:11
【问题描述】:

在 android Studio 中,我希望当我单击按钮时,下一个活动/片段应该来自右侧,并且当前活动应该向左移动。我暗示它在 Activity 上工作但不在适配器上显示错误。

holder.questions.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent i = new Intent(DoctorsProfile.this,Questions.class);
            i.putExtra("DOCTOR_ID",doctor_id);
            startActivity(i);
            overridePendingTransition( R.anim.slide_in_right_up, R.anim.slide_out_right_up);

        }
    });

overridePendingTransition 正在处理 Activity 但不适用于 Recyclerview 和 Listview 的适配器,请告知任何其他选项。我希望当我单击 recyclerview 项目时,下一个 Activity 应该使用 overridePendingTransition 导航或来自右侧。

【问题讨论】:

标签: java android android-studio android-fragments


【解决方案1】:
Fragment fragment = Fragment.newInstance();
    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
    fragmentTransaction.setCustomAnimations(R.anim.fragment_slide_left_enter,
            R.anim.fragment_slide_left_exit, R.anim.fragment_slide_right_enter,
            R.anim.fragment_slide_right_exit);
    Utils.addFragmentToActivity(fragmentTransaction, Fragment, R.id
            .content_frame);

【讨论】:

  • 但是您必须创建动画文件,您可以从任何网站轻松找到它..
【解决方案2】:

本技巧介绍如何在活动之间切换时更改 Android 的默认动画。 改变两个Activity之间动画的代码很简单:在启动一个新的Intent之后,从当前Activity调用overridePendingTransition()。此方法可从 Android 版本 2.0(API 级别 5)开始使用,它需要两个参数,用于定义当前 Activity 的进入和退出动画。 这是一个例子: //调用一个新的Activity

startActivity(new Intent(this, NewActivity.class));

//设置过渡 -> Android 2.0 及更高版本可用的方法

overridePendingTransition(R.anim.slide_in_right_up, R.anim.slide_out_right_up);

这两个参数是用 XML 文件定义的动画的资源 ID(每个动画一个)。这些文件必须放在应用程序的 res/anim 文件夹中。这些文件的示例可以在 anim 文件夹中的 Android API 演示中找到。

例如代码访问http://www.christianpeeters.com/android-tutorials/tutorial-activity-slide-animation/#more-483

【讨论】:

【解决方案3】:

像这样更改代码,您必须在适配器中将活动作为上下文传递

holder.questions.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
    Intent i = new Intent(DoctorsProfile.this,Questions.class);
            i.putExtra("DOCTOR_ID",doctor_id);
            Activity activity = (Activity) context;
    activity.startActivity(i);
    activity.overridePendingTransition(R.anim.slide_in_right_up, R.anim.slide_out_right_up);
        }
    });

注意:上下文是Activity的基础对象

更新: 我已经检查了接受的答案,但希望您了解每次启动活动时都会调用它,这不应该是最佳实践。如果您想遵循公认的答案,我建议您采用更好的方法。

替代方案: 将捆绑包中的一个参数传递给新活动,以确保来自该特定适配器的转换,因此当您也来自任何其他活动时,不应发生双重转换。

【讨论】:

    【解决方案4】:

    有一个简单的方法可以做到这一点。只需将 overridePendingTransition 放在下一个 Activity/Fragment 的 OnCreate 方法上。这样下一个 Activity 将根据您的选择来。不需要在适配器上添加 overridePendingTransition。

     @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ask_question);
        overridePendingTransition( R.anim.slide_in_right_up, R.anim.slide_out_right_up);
      }
    

    【讨论】:

    • 在 OnCreate 中调用 overridePendingTransition 的情况下,所有转换都将调用 OnCreate,其中新意图将是此活动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 2019-06-13
    • 1970-01-01
    • 2021-02-02
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多