getActionBar () रिटर्न शून्य है


176

मुझे एक अजीब समस्या हो रही है। मैं targetdk 13 के साथ एक ऐप बना रहा हूं।

मेरी मुख्य गतिविधि की getActionBar()ऑनक्रिट विधि में मैं अपने एक्शनबार को सेटअप करने के लिए कॉल करता हूं। एंड्रॉइड 3.2 एमुलेटर पर चलने पर यह ठीक काम करता है, लेकिन एंड्रॉइड 3.0 और 3.1 का getActionBar()उपयोग करते समय विधि शून्य हो जाती है।

मुझे यह बहुत अजीब लगता है, और मैं ऐसा करने का कोई कारण नहीं देख सकता। क्या यह एमुलेटर के साथ एक बग है या क्या मुझे कुछ करना है, ताकि यह सुनिश्चित हो सके कि मेरे आवेदन में एक्शनबार है?

समाधान: मुझे लगता है कि मुझे इस समस्या का हल मिल गया है। मैं गतिविधि के लिए एक लेआउट सेट करने के लिए setContentView का उपयोग नहीं कर रहा था। इसके बजाय मैं fragmentTransaction.add(android.R.id.content, mFragment, mTag)गतिविधि में एक टुकड़ा जोड़ने के लिए उपयोग कर रहा था । 3.2 में यह ठीक काम करता है, लेकिन पहले के छत्ते के संस्करणों में एक्शन बार स्पष्ट रूप से सेट नहीं किया जाता है यदि आप सेटकोन्ट व्यू का उपयोग नहीं करते हैं onCreate()। इसलिए मैंने इसे setContentView()अपने onCreate()तरीके से विधि का उपयोग करके तय किया और बस एक लेआउट के साथ इसकी आपूर्ति की जिसमें एक खाली फ्रेमलैट शामिल था। मैं अब भी fragmentTransaction.add(android.R.id.content, mFragment, mTag)पहले की तरह विधि का उपयोग कर सकता हूं ।

यह सबसे अच्छा फिक्स नहीं है, लेकिन यह काम करता है।


जैसा कि आपने एक और पोस्ट का जवाब देने के लिए कहा था कि आपको होलो थीम की आवश्यकता है क्या आपको लगता है कि आपने v13 रेस फोल्डर में अपनी होलो थीम को निर्दिष्ट नहीं किया है? खेद है कि अगर यह बहुत स्पष्ट लगता है।
PJL

नहीं, यह मेरा पहला विचार भी था, लेकिन ऐसा नहीं है। यद्यपि आपके उत्तर के लिए धन्यवाद।
क्रिश्चियन स्कॉग्सबर्ग

जवाबों:


226

विधि के getSupportActionBar()बजाय उपयोग कर सकते हैं getActionBar()


यहाँ से सब बाहर, यह मेरे लिए किया था!
msysmilu

16
धन्यवाद, मैं "android.support.v7.app.ActionBarActivity" का उपयोग कर रहा था, इसलिए इसने मेरे लिए यह किया।
२३

1
2 घंटे की खोज के बाद! GetSupportActionBar () और android.support.v7.app.ActionBarActivity को बदलना अंततः मेरे लिए इसे ठीक करता है।
फेसपल्म

यह समस्या का समाधान है।
जिग्मंटस

46

यदि आप समर्थन पुस्तकालय का उपयोग कर रहे हैं

import android.support.v7.app.ActionBarActivity;

public class MainActivity extends ActionBarActivity {

उपयोग getSupportActionBar() बजाय काgetActionBar()

* अपडेट करें:

वर्ग ActionBarActivity अब पदावनत है:

import android.support.v7.app.ActionBarActivity;

मैं उपयोग करने की सलाह देता हूं:

import android.support.v7.app.AppCompatActivity

भीतर android.support.v7.app: ActionBarActivityपदावनत उपयोग के android.support.v7.app.AppCompatActivityबजाय।
ए। पेट्रोव

35

गतिविधि देखने से पहले आपको विंडो प्रकार को एक्शनबार के रूप में परिभाषित करना होगा।

उपयोग

requestWindowFeature(Window.FEATURE_ACTION_BAR);

setContentView () विधि को कॉल करने से पहले।


अगर getSupportActionBar () काम नहीं करता है, तो यह एक आकर्षण की तरह काम करता है
अश्विन बालानी

35
  1. यदि आप android.support.v7.app.AppCompatActivity का उपयोग कर रहे हैं

    पब्लिक क्लास होमएक्टिविटी का विस्तार AppCompatActivity {

तब आपको android.support.v7.app.ActionBar का उपयोग करना चाहिए

  ActionBar ab = getSupportActionBar();
  1. यदि आप उपयोग कर रहे हैं android.support.v4.app.ragmentActivity

    सार्वजनिक वर्ग होमएक्टिविटी का विस्तार FragmentActivity {

तो आप android.app.ActionBar का उपयोग करना चाहिए

    ActionBar ab = getActionBar();
  1. यदि आप उपयोग कर रहे हैं android.support.v7.app.ActionBarActivity

    सार्वजनिक वर्ग HomeActivity का विस्तार

आपको android.support.v7.app.ActionBar का उपयोग करना चाहिए

   ActionBar ab = getSupportActionBar();

शानदार जवाब, उलझन से निपटता है !!
सूद 26००

31

मैंने उपरोक्त मुद्दे का सामना किया जहां getActionBar()विधि शून्य हो जाती है। मैं getActionBar()सेट करने के बाद फोन कर रहा था setContentView()और अभी भी इसकी वापसी एक है null

मैंने एंड्रॉइड मेनिफेस्ट फ़ाइल में मिन-एसडीके संस्करण सेट करके समस्या को हल किया जो कि शुरुआत में गायब था। <uses-sdk android:minSdkVersion="11" />


4
इसने मुझे इतना समय बचा लिया! एंड्रॉइड एसडीके में ब्लूटूथ चैट उदाहरण ऐप का उपयोग करने वाला कोई भी व्यक्ति इस फिक्स का उपयोग करने की आवश्यकता है। एप्लिकेशन का प्रकटन "minSdkVersion टैग में" android: "नामस्थान को शामिल करने की उपेक्षा करता है और इसलिए यह पंजीकृत नहीं होता है। नेमस्पेस जोड़ने से एक्शन बार नहीं मिल रहा है के साथ एक त्रुटि को ठीक करता है। मैला, गूगल!
निक

वास्तव में आपको बस लक्ष्य-निर्धारण को निर्दिष्ट करने की आवश्यकता हो सकती है। यदि आप कॉम्पिटिटर लायब्रेरी का उपयोग कर रहे हैं, तो आप कम minSdkVersion के साथ चल सकते हैं, लेकिन targetSdkVersion व्यवहार को निर्धारित करता है।
विलियम

महान!! यह वही है जिसे मैं देख रहा था।
स्विफ्टबॉय

<use-sdk android: minSdkVersion = "11" /> ने मेरी समस्या हल कर दी
माजिद

27

ActionBar को ऐप का शीर्षक रखने के लिए एप्लिकेशन या गतिविधि के थीम की आवश्यकता होती है। सुनिश्चित करें कि आपने अपने एप्लिकेशन या गतिविधि को Theme.NOTITLE के रूप में स्टाइल नहीं किया है।

<application
    android:name="com.xxx.yyy"
    android:debuggable="false"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:theme="@style/Theme.NoTitle"> // remove this line if you have this in your code


<activity
        android:name="com.xxx.yyy.Activity"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:theme="@style/Theme.NoTitle"  // remove this line if you have in your code
        android:windowSoftInputMode="adjustResize|stateHidden" > 

19
import android.support.v7.app.AppCompatActivity;

फिर

extends AppCompatActivity

तो उपयोग करें

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

गूगल के नेविगेशन ड्रॉअर उदाहरण में मेरी समस्या को ठीक करता है।
वीइश ज़ेंग

अच्छा समाधान, फिर भी उन लोगों के लिए जो इसे लागू करेंगे, संभवतः संगतता आधारित त्रुटियां प्राप्त करेंगे। यदि आप ऐसा करते हैं, तो अपने android.support.v4.app.FragmentTransaction के बजाय केवल android.app.ragmentTransaction और android.support.v7.app.ActionBar के बजाय Android.app.ctionBar
Serj

18

यह उत्तर देर से है, लेकिन Google से आने वाले किसी व्यक्ति के लिए उपयोगी हो सकता है: आपको घोषित करने की आवश्यकता हो सकती है

<item name="android:windowActionBar">true</item>

अपने में styles.xml। ऐसा लगता है falseकि यह डिफ़ॉल्ट हो सकता है। आपको एपीआई 11 या उच्चतर पर भी होना चाहिए।

अधिक विवरण यहाँ प्रलेखन में पाया जा सकता है । विशेष रूप से, बोली:

युक्ति: यदि आपके पास एक कस्टम गतिविधि विषय है जिसमें आप कार्रवाई पट्टी को निकालना चाहते हैं, तो Android सेट करें: windowActionBar शैली गुण को झूठा करने के लिए। हालाँकि, यदि आप किसी थीम का उपयोग करके एक्शन बार को हटाते हैं, तो विंडो एक्शन बार को बिल्कुल भी अनुमति नहीं देगी, इसलिए आप इसे बाद में नहीं जोड़ सकते हैं- getActionBar () कॉलिंग वापस आ जाएगी।


11

मेरे पास एक ही समस्या थी और एक समाधान setContentView()कॉल करने से पहले उपयोग करना था getActionBar()

लेकिन एक और बात थी जिसने समस्या को ठीक कर दिया। मैंने आवेदन के लिए विषय निर्दिष्ट किया @android:style/Theme.Holo.Light

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Holo.Light" >
    ...
</application>

मुझे लगता है कि किसी भी विषय, जो <item name="android:windowActionBar">true</item>उसमें है, का उपयोग किया जा सकता है।


धन्यवाद, यह मेरे लिए काम करता है। मेरे मामले में, getActionBar () विधि भी अशक्त हो गई और मैं इसे थीम शैली को Theme.Holo.Light में बदलकर हल कर सका। कुछ अन्य विषयों (जैसे Theme.AppCompat) के साथ, ऐसा लगता है कि ActionBar सक्रिय नहीं है, इसलिए इसका मान शून्य है।
harrakiss

10

इसका मुख्य कारण उन विषयों का उपयोग करना है जो ActionBar का समर्थन नहीं कर रहे हैं:

मेनिफ़ेस्ट फ़ाइल में अपनी लक्ष्य गतिविधि या एप्लिकेशन एलिमेंट में निम्नलिखित जोड़ें (यदि आप पूरे एप्लिकेशन पर विषय को एकीकृत करना चाहते हैं)

उन विषयों के उदाहरण जो कार्रवाई बार का समर्थन कर रहे हैं "Theme.AppCompat.Light"या "Theme.Holo.Light"...

android:theme="@android:style/Theme.Holo.Light"

सभी शैलियों को अंदर रखना styles.xmlऔर हर जगह इसका उपयोग करना बेहतर है "@style/themName"ताकि पिछले एक का उपयोग किया जा सके

android:theme="@style/AppTheme"

और स्टाइल। xml में निम्नलिखित होंगे:

 <style name="AppTheme" parent="Theme.AppCompat.Light">

संकेत:

  • कुछ थीम हैं जिन्हें पुराने एसडीके में उपयोग नहीं किया जा सकता है जैसे "@android:style/Theme.Holo.Light.DarkActionBar"एसडीके संस्करण 14 से पहले समर्थित नहीं है।
  • अपने एप्लिकेशन को एसडीके के न्यूनतम विशिष्ट संस्करण का समर्थन करने के लिए आप निम्नलिखित <app>तत्व जोड़ सकते हैं :

    <uses-sdk android:minSdkVersion="14" />
  • AndroidStudio में मिन एसडीके संस्करण को निर्दिष्ट करने के लिए, आप ऐप के ग्रैडल फ़ाइल का उपयोग करके कर सकते हैं।

    android{
      defaultConfig{
        minSdkVersion 14
        targetSdkVersion 21
      }
    }

लेकिन क्या मैं समर्थन एपीआई स्तर 9-13 के लिए करते हैं, जड़ना मैं Theme.Holo.Light.DarkActionBar का उपयोग
सिड

8

मैं इस समस्या में भाग गया। मैं संस्करण संख्या के लिए जाँच कर रहा था और एक्शन बार को केवल तभी सक्षम कर सकता था जब वह हनीकॉम्ब से अधिक या बराबर हो, लेकिन यह अशक्त लौट रहा था। मुझे इसका कारण और मूल कारण यह लगा कि मैंने मूल्यों- v11 फ़ोल्डर के तहत स्टाइल.एक्सएमएल में होलो थीम शैली को निष्क्रिय कर दिया था।


मैं अपने AppTheme के मूल विषय के रूप में Holo थीम का उपयोग करके अपने मुद्दे को हल कर लिया है।
भरत डोडेजा

7

AndroidManifest.xml पर जाएं और बदलें

एंड्रॉयड: विषय = "@ शैली / AppTheme"

by 

एंड्रॉयड: विषय = "@ एंड्रॉयड: शैली / Theme.Holo.Light.DarkActionBar"



4

मेरे मामले में, मेरे पास मेरे कोड में यह काम नहीं किया गया था:

@Override
protected void onCreate(Bundle savedInstanceState) {
    context = getApplicationContext();

    requestWindowFeature(Window.FEATURE_ACTION_BAR);

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
}

फिर मैंने कोड के आदेश के साथ खेला:

@Override
protected void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_ACTION_BAR);

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    context = getApplicationContext();
}

और यह काम किया!

निष्कर्ष: requestWindowFeature पहली चीज होनी चाहिए जिसे आप ऑनक्रीट विधि से कहते हैं।


3

मेरी भी यही समस्या थी। यह style.xml में ऐप थीम को जप द्वारा हल किया गया

इससे पहले

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

उपरांत

<!-- Base application theme. -->
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">

2

एक बात जो मैं जोड़ना चाहता था क्योंकि मैं अभी इसमें भाग गया था, यदि आप एक माता-पिता की गतिविधि पर AActionBar () प्राप्त करने की कोशिश कर रहे हैं, तो यह अशक्त हो जाएगा। मैं कोड को रिफैक्ट करने की कोशिश कर रहा हूं, जहां मेरी गतिविधि एक एक्टिविटी ग्रुप के अंदर समाहित है, और स्रोत में एक्शनबार कैसे बनता है, यह देखने के बाद मुझे "ओह डुह" जाने में कुछ मिनटों का समय लगा।


क्या आप गतिविधि समूहों के लिए अपना समाधान पोस्ट कर सकते हैं?
Anthea

मुझे जो याद है, उससे मेरा समाधान है कि मैं किसी भी गतिविधि समूह का उपयोग न करने के लिए अपना कोड रद्द कर दूं। क्षमा करें, मेरे पास कोड स्निपेट नहीं हैं :(
C निक

यह वास्तव में एक विलेय नहीं है; एक टिप्पणी के अधिक। लेकिन बहुत उपयोगी है!
काटो

1

मैं इसे इस बदलाव से हल करता हूं:

  1. न्यूनतम में परिवर्तन android:theme="@android:style/Theme.Holo.Light" >
  2. वर्ग में जोड़ें extends ActionBarActivity
  3. वर्ग में आयात जोड़ें import android.support.v7.app.ActionBarActivity

1

अन्य उत्तरों में जोड़ने के लिए:

सुनिश्चित करें कि आप कॉल करने से पहले setActionBar()या setSupportActionBar()अपने onCreate()तरीके से कॉल करें getActionBar():

अपनी गतिविधि में कुछ टूलबार को परिभाषित करें। xml, फिर ऑनक्रिएट () में:

Toolbar toolbar = (Toolbar) findViewById(R.id.my_toolbar);
setSupportActionBar(toolbar);
// Now you can use the get methods:
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

0

मुझे पता है कि मुझे इस सवाल पर पार्टी (और एंड्रॉइड के लिए नया) पर देर हो रही है लेकिन मुझे यहां जानकारी बहुत उपयोगी लगी और मुझे लगा कि मुझे एक्शनबेर को काम करने के लिए अपने स्वयं के प्रयासों के निष्कर्षों को जोड़ना चाहिए क्योंकि मैं चाहता हूं कि मेरे जैसे अन्य लोग आएं। मदद की तलाश में

मेरे पास एक विजेट है जो एक फ्लोटिंग विंडो है जिसमें कोई विंडो शीर्षक नहीं है। मैं लागू करने के लिए एक शैली विषय का उपयोग करता हूं android:windowIsFloating, android:backgroundDimEnabledऔरandroid:windowNoTitle । विजेट तब तक ठीक काम करता था जब तक कि मैं एक बटन जोड़ना नहीं चाहता था जो कई सूची के टुकड़े पृष्ठों के साथ एक टुकड़ा पेजर कहलाता है और ActionBar का उपयोग करता है। यह अशक्त सूचक अपवाद के साथ पेजर गतिविधि पर क्रैश होगा। मैंने इसे एक्शनबार को शून्य होने के लिए सीमित कर दिया। पिछले लोगों के निष्कर्षों के बाद, जिन्होंने इस धागे में योगदान दिया, मैंने अपनी थीम को प्रकट फ़ाइल से हटा दिया और एक्शनबार ने ठीक काम किया लेकिन अब मेरी खिड़की अब फ्लोट हो गई (यह फुलस्क्रीन थी) और इसमें एक पृष्ठ शीर्षक था जो मैं नहीं चाहता था।

आगे के शोध मुझे स्टाइल्स एंड थीम्स एपीआई ट्रेनिंग गाइड में ले गए जिसने मुझे एक समाधान के लिए प्रेरित किया। मुझे पता चला कि मैं अपनी कस्टम थीम को घोषणापत्र फ़ाइल में व्यक्तिगत गतिविधियों में जोड़ सकता हूं जबकि इससे पहले कि मैं इसे आवेदन पर लागू कर रहा हूं। मेरी सभी खिड़कियों में अब वांछित उपस्थिति है।


0

ActionBarActivity से अपने गतिविधि वर्ग को विस्तारित करने का प्रयास करें। इससे मेरे लिए हल हो गया। कुछ इस तरह से करें:

public class MyActivity extends ActionBarActivity
{
  . . .

मेरे मामले में एक्टिविटी से ही क्लास बढ़ रही थी।


0

इससे कुछ लोगों को मदद भी मिल सकती है।

मेरे मामले में, यह इसलिए था क्योंकि मैंने menu.xml में एक संदर्भ को परिभाषित नहीं किया था

इसे इस्तेमाल करे:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.android.ActionBarActivity">

इसके अलावा:

<menu xmlns:android="http://schemas.android.com/apk/res/android">

0

कमांड कोड के स्रोत कोड के कार्यान्वयन की जाँच करें:

    private void initWindowDecorActionBar() {
    Window window = getWindow();

    // Initializing the window decor can change window feature flags.
    // Make sure that we have the correct set before performing the test below.
    window.getDecorView();

    if (isChild() || !window.hasFeature(Window.FEATURE_ACTION_BAR) || mActionBar != null) {
        return;
    }

    mActionBar = new WindowDecorActionBar(this);
    mActionBar.setDefaultDisplayHomeAsUpEnabled(mEnableDefaultActionBarUp);

    mWindow.setDefaultIcon(mActivityInfo.getIconResource());
    mWindow.setDefaultLogo(mActivityInfo.getLogoResource());
}

requestWindowFeature (Window.FEATURE_ACTION_BAR); जब मैंने देखा कि मेरा अनुरोध फिक्स्ड है। विंडवॉएट्योर (Window.FEATURE_ACTION_BAR) विफल हो रहा है; कोड खुला स्रोत का उपयोग है !!


0

android.support.v7.app.ActionBar actionBar = getSupportActionBar();

बहुत जल्दी काम करता है


3
हालांकि यह कोड प्रश्न का उत्तर दे सकता है, लेकिन यह समस्या का हल कैसे और / या इसके बारे में अतिरिक्त संदर्भ प्रदान करता है, इससे उत्तर के दीर्घकालिक मूल्य में सुधार होगा।
निक 3500

0

मेरे मामले में मुझे AppCompatActivityइसके बजाय विस्तार करना पड़ाActivity

    supportActionBar?.setDisplayHomeAsUpEnabled(true)

पूर्ण गतिविधि उदाहरण वर्ग:

import android.os.Bundle इंपोर्ट androidx.appcompat.app.AppCompatActivity

//class LocationFound : Activity() { <-----Does not seem to work with ActionBar in recent versions
class LocationFound : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_location_found)

        supportActionBar?.setDisplayHomeAsUpEnabled(true)
    } }

संस्करणों पर

    minSdkVersion 22
    targetSdkVersion 29
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.