在安卓系统中创建自定义的返回按钮

6

我有一个应用程序,其中有菜单,根据您在菜单中按下的按钮,将打开一个新活动。我想在每个屏幕上都有一个返回按钮,可以将您带回到上一个屏幕,因此我想知道如何实现这一点?

这里是我使用过的一些代码,可以正常工作:

backButton = (ImageButton) findViewById(R.id.back_button);
        backButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {


                finish();

            }
        });

然而,把这段代码放在所有活动中并不是良好的编程实践。我该如何创建某种类型的堆栈来保存所有已查看的页面,并使用它返回到前一个页面?

我必须在我的应用程序中放置一个后退按钮,因此我不能使用ActionBar中的现有按钮。


1
你已经做到了良好的编程实践,就像默认行为一样。 - Dhaval Parmar
6个回答

10

只是一个想法

创建一个扩展自Activity的基类(baseClass)。在该类中声明:

    @Override
    public void onClick(View v) {
         super.onBackPressed(); // or super.finish();
    }
在所有的活动中都要扩展这个基类。并且在每个布局中的按钮中加入。
   android:onClick="onClick"

为了使按钮的XML设计可重复使用,将其创建在单独的XML文件中,并使用<include/>添加它。


哇!非常感谢,正如我所期望的那样。 - user18148338

8

你尝试过在活动中使用操作栏吗?在每个活动中都可以使用。

ActionBar actionBar = getSupportActionBar();
if(actionBar != null){
    actionBar.setTitle(getResources().getString(R.string.app_name));
    actionBar.setDisplayHomeAsUpEnabled(true);
    actionBar.setIcon(R.drawable.app_icon);
}

并在中处理

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

3
直到我将actionBar.setIcon(R.drawable.app_icon); 替换为actionBar.setHomeAsUpIndicator(R.drawable.app_icon);,这个图标才真正改变了。 - Tamarisk
1
答案是误导性的,正如@Tamarisk所提到的,应该使用actionBar.setHomeAsUpIndicator(R.drawable.app_icon)而不是actionBar.setIcon(R.drawable.app_icon) - Rafael
https://developer.android.com/reference/android/app/ActionBar.html#setIcon(int)答案是5年前给出的。请检查您是否将Toolbar用作操作栏,或者使用不支持的操作栏。 - Rahul Patil

5

我建议不要使用自定义返回按钮。Android有一个硬件返回按钮。按下硬件返回按钮将导航到上一个界面。

我认为你不需要自定义返回按钮。覆盖默认行为不是好的编程实践。

你可以在你的活动中创建一个返回按钮,并像上面所做的那样实现功能。但用户仍然可以使用硬件返回按钮进行相同的操作。因此,你提供的是重复的功能。


这个回答过时了 :| - user1834857
1
自回答问题以来,情况发生了很大变化 :) - Raghunandan

1
所有安卓设备上都有一个硬件返回按钮,它的功能与你的代码行所做的完全相同,除非被覆盖为执行其他操作。
你也可以参考这个答案

0

我曾经遇到过类似的问题,当时我使用了一个返回按钮“取消”和一个主屏幕“homeActivity”。最终我通过以下方式解决了这个问题:

CancelButton = (Button) findViewById(R.id.cancel_button);
        CancelButton.setOnClickListener(new OnClickListener() {

             public void onClick(View view) {
                 Intent homeActivity = new Intent(getApplicationContext(), DeviceListActivity.class);

                 startActivity(homeActivity);
                 finish();  
            }
        });

0

用Kotlin编程

 backButton!!.setOnClickListener(View.OnClickListener {
 onBackPressed()
  })

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接