scrolling collapsing collapsible collapsemode bar app android

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