【问题标题】:onBackPressed not called from Toolbar未从工具栏调用 onBackPressed
【发布时间】:2018-07-11 21:27:00
【问题描述】:

我知道有很多关于此主题的问题已发布,但我找不到可行的解决方案。

我希望在按提示栏中的左箭头时调用 onBackPressed()。 我正在使用 appcompat-v7:23:1:0。 左箭头在我的应用程序中无处不在,但在这里。我怀疑这与我从片段开始活动有关。

Activity_A > 启动 Fragment_A(扩展 SupportMapFragment) > 启动 Activity_B。

当从 Activity_B 按下返回箭头时,我想返回 Fragment_A。 目前,箭头不响应单击,onBackPressed 不是从工具栏调用,而是在按下硬件后退按钮时调用。

我试过添加

@Override
public void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

我已经在清单中添加了这个:

 <activity
        android:name=".activity.Activity_B"
        android:windowSoftInputMode="stateHidden"
        android:parentActivityName=".activity.Activity_A" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".activity.Activity_A"
            />
    </activity>

(为了清楚起见,替换了活动名称)

【问题讨论】:

  • 您有自定义操作栏吗?即您是否使用过工具栏?
  • 不,它是来自 android.support.v7.widget 的默认工具栏对象,是的,工具栏在项目中的任何地方都成功使用

标签: android android-toolbar android-lifecycle android-appcompat


【解决方案1】:

看来问题与我的activity_B的xml布局有关

我在工具栏下方有一个滚动视图。该 scrollView 有一个 android:layout_below="@id/contact_center" ,其 id 在该活动中不存在。

我知道这听起来很奇怪,但是在反复使用代码后,我 100% 确定这会导致 onBackPress() 没有响应。

所以对于有类似问题的人,请注意您的 xml 布局,那里可能有错误导致这个奇怪的问题。此外,对来自其他活动的复制粘贴代码非常多;)

感谢您的帮助。

【讨论】:

    【解决方案2】:

    在你的 onCreateOptionMenu 中添加这个

    int id = item.getItemId();
    
        if (id == android.R.id.home) {
            NavUtils.navigateUpFromSameTask(this);
    
            return true;
        }
    

    也添加这个

    getSupportActionBar().setDisplayShowHomeEnabled(true);
    

    【讨论】:

    • 你是说'public boolean onOptionsItemSelected(MenuItem item) {'吗?没用……
    • 是的并添加 getSupportActionBar().setDisplayShowHomeEnabled(true);到你的 onCreate 方法
    【解决方案3】:

    试试这个

    public void setUpToolbar() {
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        toolbar.setTitle("Toolbar Title");
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }
    
    @Override
    public boolean onSupportNavigateUp() {
        onBackPressed();
        return true;
    }
    
    @Override
    public void onBackPressed() {
        Toast.makeText(getApplicationContext(), "here", Toast.LENGTH_SHORT).show();
        super.onBackPressed();
    }
    

    【讨论】:

      猜你喜欢
      • 2014-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-05
      • 1970-01-01
      • 1970-01-01
      • 2016-12-22
      • 1970-01-01
      相关资源
      最近更新 更多