Android

时间:2016-04-06 16:56:54

标签: android android-actionbar

我正在开发一款Android应用。我正在使用ActionBar和AppCompactActivity。在我的应用程序中,我将按钮添加到操作栏。但是当我点击它时,它不会回到之前的活动。例如,我从活动1开始活动2.活动2包含带后退按钮的操作栏。但是当我点击活动2的操作栏后退按钮时,它不会返回到活动1。

这是我为活动2设置操作栏的方式:

public class EditProfileActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.edit_profile);
        Toolbar toolbar = (Toolbar)findViewById(R.id.profile_action_toolbar);
        setSupportActionBar(toolbar);
        setTitle("Edit Profile");
        ActionBar actionBar= getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

这是我从活动1开始活动2的方式:

Intent i = new Intent(MainActivity.this,SecondActivity.class);
                    startActivity(i);

单击此按钮时不会返回

enter image description here

为什么不回去?

8 个答案:

答案 0 :(得分:31)

将以下内容添加到您的活动中。您必须处理后退按钮的点击事件。

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

答案 1 :(得分:8)

这里有2个选项:

a)在AndroidManifest.xml中为parentActivityName标记提供SecondActivity,如下所示:

 <activity
    ...
    android:name=".SecondActivity"
    android:parentActivityName=".MainActivity" >

b)覆盖onOptionsItemSelected中的SecondActivity,如下所示:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    // Respond to the action bar's Up/Home button
    case android.R.id.home:
        onBackPressed();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

我建议您阅读this guide以获取更多信息。

答案 2 :(得分:1)

这是您的代码

 public class EditProfileActivity extends AppCompatActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);
            setContentView(R.layout.edit_profile);
            Toolbar toolbar = (Toolbar)findViewById(R.id.profile_action_toolbar);
            setSupportActionBar(toolbar);
            setTitle("Edit Profile");
            ActionBar actionBar= getSupportActionBar();
            actionBar.setDisplayHomeAsUpEnabled(true);
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            int id = item.getItemId();
            if (item.getItemId() == android.R.id.home) {
                   finish();
            }

            return super.onOptionsItemSelected(item);
        }
    }     

答案 3 :(得分:1)

onCreate()

中将其添加到您的活动中
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);

    toolbar.setNavigationOnClickListener(v -> {
        //What to do when back is clicked
        finish();
    });

答案 4 :(得分:0)

首先,请始终查看Android指南http://developer.android.com/intl/pt-br/design/patterns/navigation.html,以防止Google阻止Android应用。

尝试在您的活动中添加此代码

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
    switch (menuItem.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            break;
    }

    return super.onOptionsItemSelected(menuItem);
}

@Override
public void onBackPressed() {
    super.onBackPressed();
}

答案 5 :(得分:0)

你必须覆盖onOptionsItemSelected并检查项目的id,如果它与home按钮的id相等,只需调用onBackPressed方法。

@Override
        public boolean onOptionsItemSelected(MenuItem item) {
            if (item.getItemId() == android.R.id.home) {
                onBackPressed();
            }
            return super.onOptionsItemSelected(item);
        }

答案 6 :(得分:0)

您必须定义单击该按钮时应该发生的事情,这可以在您的第二个活动的onOptionsItemSelected方法中完成。请注意android.R.id.home常量,它指的是您要使用的活动的后退按钮。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

    case android.R.id.home:

        finish(); //close the activty
        return true;
    }
    return super.onOptionsItemSelected(item);
}

答案 7 :(得分:0)

我建议不要在onOptionsItemSelected中处理“ android.R.id.home”,因为它很脆弱。相反,您应该覆盖onSupportNavigateUp方法。

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

注意:如果使用onOptionsItemSelected,则应默认返回false,否则将不调用onSupportNavigateUp方法。