Android Volver Flecha en la barra de herramientas (AppCompatActivity)

Quiero mostrar el botón de flecha hacia atrás en mi aplicación, pero la aplicación se bloquea cuando coloco esto en mi código:

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

Style.xml

  <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">@color/PrimaryColor</item> <item name="colorPrimaryDark">@color/PrimaryColorDark</item> <item name="colorAccent">@color/PrimaryColor</item> <item name="colorControlHighlight">@color/ControlHighlight</item> <item name="android:statusBarColor" tools:targetApi="21">@android:color/transparent</item> </style> <style name="ActionBarPopupThemeOverlay" parent="ThemeOverlay.AppCompat.Light" > <item name="android:textColor">#000000</item> </style> <style name="MyCustomTabLayout" parent="Widget.Design.TabLayout"> <item name="tabIndicatorColor">#FFFFFF</item> <item name="tabIndicatorHeight">3dp</item> <item name="tabTextAppearance">@style/MyCustomTabTextAppearance</item> </style> <style name="MyCustomTabTextAppearance" parent="TextAppearance.Design.Tab"> <item name="android:textColor">#FFFFFF</item> </style> 

Toolbar.xml

 <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_height="@dimen/abc_action_bar_default_height_material" android:elevation="0dp" android:layout_width="match_parent" android:id="@+id/toolbar" android:background="@color/PrimaryColor" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/ActionBarPopupThemeOverlay"/> 

Clase (no Fragmento) :

 public class WebViewCanale extends AppCompatActivity { Toolbar toolbar; TextView textView; WebView webView; ProgressBar progressBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.webview_canali); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); //Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); //FindViewById webView = (WebView) findViewById(R.id.webview); textView = (TextView) findViewById(R.id.textView); progressBar = (ProgressBar) findViewById(R.id.progressBar); //Impostazioni WebView WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setLoadsImagesAutomatically(true); webView.loadUrl(this.getIntent().getDataString()); webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); webView.getSettings().setAppCacheEnabled(false); //Titolo Toolbar webView.setWebChromeClient(new WebChromeClient() { @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); if (!TextUtils.isEmpty(title)) { WebViewCanale.this.setTitle(title); } } }); } } 

Me pregunto por qué no hay una respuesta completa para esto en SO, pero finalmente he resuelto el asunto por mi cuenta:

Utilice el fragmento siguiente para tener el botón Atrás en la barra de herramientas en una AppCompatActivity :

  toolbar = (Toolbar) findViewById(R.id.hack_toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //do something you want } }); 

También puede declarar en el Manifest una ParentActivity con: <android:ParentActivityName=".TheActivityThatCalledThisOne">

Añadir este tema:

 <style name="AppTheme2" parent="Theme.AppCompat.Light"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> <item name="colorPrimary">@color/appColor</item> <item name="colorControlNormal">@color/whiteColor</item> <item name="colorControlActivated">@color/appColor</item> </style> 

Y en su actividad:

  Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

Debe configurar la barra de acción de soporte primero antes de que pueda obtenerla. Así que coloque el siguiente código

 toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); 

Antes de este Código

 getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); 
  @BindView(R.id.toolbar) Toolbar toolbar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_user_events); ButterKnife.bind(this); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } @Override public boolean onSupportNavigateUp() { onBackPressed(); return true; } 

onSupportNavigateUp() Este método se llama siempre que el usuario elige navegar en la jerarquía de actividades de la aplicación desde la barra de acciones.

onBackPressed(); Tenga cuidado de hacer estallar la pila trasera del fragmento o terminar la actividad según corresponda.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.