collapsing - Error de Android
layout collapsemode parallax (18)
Creo que lo que quieres hacer es lanzar getActivity (). Por ejemplo:
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Esto es lo que necesita hacer con las nuevas bibliotecas de soporte. AppCompatActivity ha reemplazado a ActionBarActivity.
Tengo un módulo de código que implementa el visor con el cajón de navegación, sin embargo, cuando ejecuto el código aparece el siguiente error
01-26 09:20:02.958: D/AndroidRuntime(18779): Shutting down VM
01-26 09:20:02.959: E/AndroidRuntime(18779): FATAL EXCEPTION: main
01-26 09:20:02.959: E/AndroidRuntime(18779): Process: com.example.tabwithslidingdrawer, PID: 18779
01-26 09:20:02.959: E/AndroidRuntime(18779): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.tabwithslidingdrawer/com.example.tabwithslidingdrawer.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method ''void android.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)'' on a null object reference
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2314)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2388)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.ActivityThread.access$800(ActivityThread.java:148)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.os.Handler.dispatchMessage(Handler.java:102)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.os.Looper.loop(Looper.java:135)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.ActivityThread.main(ActivityThread.java:5312)
01-26 09:20:02.959: E/AndroidRuntime(18779): at java.lang.reflect.Method.invoke(Native Method)
01-26 09:20:02.959: E/AndroidRuntime(18779): at java.lang.reflect.Method.invoke(Method.java:372)
01-26 09:20:02.959: E/AndroidRuntime(18779): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
01-26 09:20:02.959: E/AndroidRuntime(18779): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
01-26 09:20:02.959: E/AndroidRuntime(18779): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method ''void android.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)'' on a null object reference
01-26 09:20:02.959: E/AndroidRuntime(18779): at com.example.tabwithslidingdrawer.MainActivity.onCreate(MainActivity.java:95)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.Activity.performCreate(Activity.java:5953)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1128)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2267)
01-26 09:20:02.959: E/AndroidRuntime(18779): ... 10 more
09:20:02.959: E/AndroidRuntime(18779): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method ''void android.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)'' on a null object reference 01-26 09:20:02.959: E/AndroidRuntime(18779): at com.example.tabwithslidingdrawer.MainActivity.onCreate(MainActivity.java:95)
apunta a esta línea
// enabling action bar app icon and behaving it as a toggle button
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
código completo http://pastebin.com/u1K72fr7
Mi manifiesto
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.tabwithslidingdrawer"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.Tabwithpager" >
<activity
android:name="com.example.tabwithslidingdrawer.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
android: theme = "@ style / Theme.Tabwithpager"
código http://pastebin.com/EFQLzRej
================================================== ================ EDITAR / ACTUALIZAR:
Lo que aprendí de esto
Cada vez que ocurre tal error
1. Compruebe qué tipo de actividad se está utilizando, ¿es una simple actividad android.app o una AppCompatActivity o una ActionBarActivity y así sucesivamente?
2. Compruebe si su tipo de actividad que se extiende pertenece a la categoría de compatibilidad
Por ejemplo, la Actividad / Fragmento basado en android.app no son tipos de appCompat, mientras que android.support.v4.app.Fragment o android.support.v4.app.ActivityCompat se basan en appCompat
si cae dentro de appCompat, usamos getSupportActionBar () más para los tipos android.app, podemos usar getActionBar ()
3. Marque el tema aplicado a la actividad en cuestión en el archivo de manifiesto
ejemplo: en el archivo de manifiesto si el tema aplicado es decir android: theme = "@ android: style / Theme.Holo.Dialog" getActionBar () funcionará
pero si el tema aplicado para la actividad en el manifiesto es el siguiente android: theme = "@ style / Theme.AppCompat.Light", entonces debe usar getSupportActionBar ()
Cuando use AppCompatActivity debe llamar
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Antes de
getSupportActionBar()
public class PageActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_item);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
this.getSupportActionBar().setDisplayHomeAsUpEnabled(false);
}
}
Deberías probar este. Creo que funcionará.
Toolbar toolbar = findViewById(R.id.toolbar1);
setSupportActionBar(toolbar);
mDrawerLayout = findViewById(R.id.drawer_layout);
mDrawerLayout = findViewById(R.id.drawer_layout);
mDrawerLayout.setDrawerShadow(R.drawable.rectagle_with_black_outer,
GravityCompat.START);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
toolbar, R.string.navigation_drawer_close,
R.string.navigation_drawer_close) {
public void onDrawerClosed(View view) {
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
invalidateOptionsMenu();
}
};
El botón Arriba generalmente se activa para actividades de bajo nivel.
En tu manifiesto solo veo la actividad principal.
No creo que tenga sentido activar el botón arriba para la actividad principal.
Cree una actividad, luego en el manifiesto agregue el atributo parentActivityName.
Luego active el botón arriba en el método onCreate de la actividad.
Esto debería ayudar.
https://developer.android.com/training/appbar/up-action.html
En mi caso es debido a que
styles.xml
estableció el tema principal incorrecto, es decir, el tema
NoActionBar
, por supuesto,
getSupportActionbar()
es nulo:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
Lo cambié a otra cosa lo arregló:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
En mi caso, tuve el mismo error, pero mi error fue no haber declarado mi barra de herramientas.
Entonces, antes de usar getSupportActionBar, tenía que encontrar mi barra de herramientas y establecer la barra de acción
appbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(appbar);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_nav_menu);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Intenta hacer esto:
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
En lugar de esto:
actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
Intenta verificar aquí
res >> valores >> styles.xml
asegúrese de que no haya un código como este
<item name="windowActionBar">false</item>
si hay un código como ese, puede deshabilitarlo por un tiempo o borrarlo
La mejor solución es hacer esto en tu método Oncreate
ActionBar actionBar = getSupportActionBar();
if(actionBar != null){
actionBar.setDisplayHomeAsUpEnabled(true);
}
seguido de una nueva clase
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if(id == android.R.id.home){
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
Obtuve el mismo error una vez, creé una plantilla para una barra de herramientas predeterminada (toolbar.xml) y luego, en otra vista, creé una barra de herramientas plegable.
Necesitaba agregar la barra de herramientas plegable a una vista que muestre cierta información del usuario (como WhatsApp), pero el método findViewById hacía referencia a la barra de herramientas predeterminada (barra de herramientas de identificación), no a la que se puede plegar (barra de herramientas de identificación también) sí, escribí la misma identificación para ambas barras de herramientas, así que cuando intenté acceder a la actividad, la aplicación se bloqueó y me mostró el error.
Solucioné el error cambiando la identificación de la barra de herramientas plegable a id: col_toolbar y el error desapareció y mi aplicación funcionó perfectamente
Para aquellos que todavía tienen este problema, mi problema se resolvió en el archivo AndroidManifest.xml.
Donde dice
<activity android:name=".MainActivity" android:theme="@style/AppTheme.NoActionBar">
, debe eliminar
NoActionBar
, convirtiéndolo en
<activity android:name=".MainActivity" android:theme="@style/AppTheme">
, porque con NoActionBar configurado, la aplicación no sabe si quiere o no una barra de acción cuando llama una dentro de MainActivity.java
Para cualquier otra persona que tenga una BaseActivity y un niño que se extienda desde ella, asegúrese de que se llame a super.onCreate () antes de hacer nada. La antigua actividad funcionaría si luego llamaras a super.onCreate ().
El niño extiende la actividad: podría llamar super después de que hiciste cosas
@Override
protected void onCreate(Bundle savedInstanceState)
{
getActionBar().setDisplayHomeAsUpEnabled(true);
super.onCreate(savedInstanceState);
Child extiende AppCompatActivity - ya tienes que llamar a super primero
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState); //do this first
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Sé que esta pregunta es algo viejo. Pero esto puede ayudar a muchos que presentan este problema.
Para resolver este problema, verifique si hay un punto de nulidad. Luego aplique la configuración correspondiente:
if(getSupportActionBar() != null){
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
}
Si alguien quiere usar android.app.ActionBar y android.app.Activity , debe cambiar el tema de la aplicación en styles.xml , por ejemplo:
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
El problema es que podrías estar usando un tema de AppCompat .
Por otro lado, si desea usar android.support.v7.app.ActionBar y extiende su actividad con AppCompatActivity , debe usar un tema de AppCompat para evitar este problema, por ejemplo:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
Espero que esto ayude.
Si está utilizando android.app.ActionBar y android.app.Activity, debe cambiar el tema de la aplicación en la etiqueta de la aplicación:
<aplicación
android: theme = "@ android: style / Theme.Holo.Light">
Su código está arrojando en
com.example.tabwithslidingdrawer.MainActivity.onCreate(MainActivity.java:95)
:
// enabling action bar app icon and behaving it as toggle button
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
El problema es bastante simple: su
Activity
está heredando del nuevo
android.support.v7.app.ActionBarActivity
.
Debería estar utilizando una llamada para
getSupportActionBar()
lugar de
getActionBar()
.
Si mira por encima de la línea 65 de su código, verá que ya lo está haciendo:
actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
// TODO: Remove the redundant calls to getSupportActionBar()
// and use variable actionBar instead
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
Y luego hacia abajo alrededor de la línea 87 parece que descubriste lo mismo:
getSupportActionBar().setTitle(
Html.fromHtml("<font color=/"black/">" + mTitle + " - "
+ menutitles[0] + "</font>"));
// getActionBar().setTitle(mTitle +menutitles[0]);
Observe cómo comentó
getActionBar()
.
cuando extienda appcompatActivity , use
this.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
y cuando extiendes ActionBar usa
this.getActionBar().setDisplayHomeAsUpEnabled(true);
no olvide llamar a esta función en oncreate después de inicializar la barra de herramientas / barra de acciones
en esta línea en su actividad:
super.onCreate(savedInstanceState);
setContentView(R.layout.Activity_Main);
utilizar este:
super.onCreate(savedInstanceState);
setContentView(R.layout.*);
*
es tu actividad