onBackPressed未从工具栏调用

时间:2016-01-21 10:38:35

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

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

当我按下tootbar中的左箭头时,我希望调用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>

(替换活动名称以澄清)

3 个答案:

答案 0 :(得分:1)

问题似乎与我的activity_B的xml布局有关

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

我知道这听起来很奇怪但是我已经使用代码前进了,我完全确定这会导致onBackPress()无法响应。

因此对于有类似问题的人,请注意你的xml布局,可能会出现错误导致这个奇怪的问题。此外,非常varefull与其他活动的复制粘贴代码;)

感谢您的帮助。

答案 1 :(得分:0)

在onCreateOptionMenu

中添加此内容
int id = item.getItemId();

    if (id == android.R.id.home) {
        NavUtils.navigateUpFromSameTask(this);

        return true;
    }

还添加此

getSupportActionBar().setDisplayShowHomeEnabled(true);

答案 2 :(得分:0)

尝试一下

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();
}