code

getActionBar()가 null을 반환합니다.

starcafe 2023. 11. 4. 13:11
반응형

getActionBar()가 null을 반환합니다.

이상한 문제가 생겼어요.targetsdk 13으로 앱을 만들고 있습니다.

내 주요 활동의 생성 방법에서 호출합니다.getActionBar()내 액션바를 설치할 수 있습니다.이것은 Android 3.2 에뮬레이터에서 실행될 때는 잘 작동하지만 Android 3.0과 3.1을 사용할 때는getActionBar()메서드가 null을 반환합니다.

저는 이것이 매우 이상하다고 생각합니다. 그리고 저는 그것이 그렇게 될 이유가 없습니다.에뮬레이터에 버그가 있는 건가요, 아니면 애플리케이션에 액션바가 있는지 확인하기 위해 제가 해야 할 일이 있나요?

해결책: 이 문제에 대한 해결책을 찾은 것 같습니다.활동 레이아웃을 설정하기 위해 setContentView를 사용하지 않았습니다.대신에 나는 사용하고 있었습니다.fragmentTransaction.add(android.R.id.content, mFragment, mTag)활동에 조각을 추가할 수 있습니다.3.2에서는 잘 작동했지만 이전 허니콤 버전에서는 setContentView를 사용하지 않으면 작업 표시줄이 설정되지 않은 것으로 보입니다.onCreate()방법.그래서 제가 이걸 사용해서 고쳤어요.setContentView()method in myonCreate()방법 및 빈 프레임 레이아웃을 포함하는 레이아웃을 제공하는 것입니다.나는 여전히 사용할 수 있습니다.fragmentTransaction.add(android.R.id.content, mFragment, mTag)이전과 동일한 방법으로 방법을 사용합니다.

가장 예쁜 건 아니지만 효과는 있어요.

사용가능getSupportActionBar()대신에getActionBar()방법.

지원 라이브러리를 사용하는 경우

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
  1. 안드로이드를 사용하는 경우.support.v7.app.앱 컴파트 활동

    퍼블릭 클래스 HomeActivity AppCompatActivity {

그럼 안드로이드를 쓰셔야겠네요.support.v7.app.액션바

  ActionBar ab = getSupportActionBar();
  1. 안드로이드를 사용하는 경우.support.v4.app.프래그먼트 액티비티

    public class HomeActivity가 FragmentActivity {을(를) 확장합니다.

안드로이드 앱을 사용해야 합니다.액션바

    ActionBar ab = getActionBar();
  1. 안드로이드를 사용하는 경우.support.v7.app.작업 표시줄 활동

    public class HomeActivity가 ActionBarActivity {을(를) 확장합니다.

안드로이드를 사용해야 합니다.support.v7.app.액션바

   ActionBar ab = getSupportActionBar();

활동이 보기를 렌더링하기 전에 창 유형을 수행 표시줄로 정의해야 합니다.

사용하다

requestWindowFeature(Window.FEATURE_ACTION_BAR);

setContentView() 메서드를 호출하기 전에 를 지정합니다.

나는 위의 문제에 직면했습니다.getActionBar()메서드가 null을 반환합니다.제가 전화를 드렸는데요.getActionBar()셋팅후에setContentView()그리고 여전히 그것은 a를 반환합니다.null.

초기에 누락되었던 min-sdk 버전을 안드로이드 매니페스트 파일에 설정하여 문제를 해결하였습니다.<uses-sdk android:minSdkVersion="11" />

ActionBar는 앱 제목을 가지려면 응용프로그램 또는 활동의 테마가 필요합니다.응용프로그램이나 활동을 테마로 스타일을 지정하지 않았는지 확인합니다.노타이틀.

<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" > 
import android.support.v7.app.AppCompatActivity;

그리고나서

extends AppCompatActivity

그럼 쓰시오

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

이 답변은 늦었지만 Google에서 도착하는 모든 사용자에게 도움이 될 수 있습니다.당신은 아마 신고해야 할 것입니다.

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

당신의styles.xml. 그런 것 같습니다.false기본값일 수 있습니다.또한 API 11 이상에 있어야 합니다.

자세한 내용은 여기 설명서에서 확인할 수 있습니다.구체적으로 인용하자면:

팁: 작업 표시줄을 제거하려는 사용자 지정 작업 테마가 있는 경우 Android:windowActionBar 스타일 속성을 false로 설정합니다.그러나 테마를 사용하여 수행 표시줄을 제거하면 창에서 수행 표시줄을 전혀 허용하지 않으므로 나중에 추가할 수 없습니다. getActionBar()를 호출하면 null이 반환됩니다.

저도 같은 문제가 있었는데 그 해결책 중 하나는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>그 안에서, 사용할 수 있습니다.

그 주된 이유는 ActionBar를 지원하지 않는 테마를 사용하기 때문입니다.

매니페스트 파일에서 대상 활동 또는 응용프로그램 요소에 다음을 추가합니다(전체 응용프로그램에서 테마를 통일하려면).

수행 표시줄을 지원하는 테마 예제"Theme.AppCompat.Light"아니면"Theme.Holo.Light"...

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

모든 스타일을 넣어주는 것이 좋습니다.styles.xml사용하는 모든 곳에 사용할 수 있습니다."@style/themName"그래서 이전 것은.

android:theme="@style/AppTheme"

styles.xml은 다음과 같습니다.

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

힌트:

  • 이전 SDK에서는 사용할 수 없는 테마가 있습니다."@android:style/Theme.Holo.Light.DarkActionBar"SDK 버전 14 이전에는 지원되지 않습니다.
  • 앱에서 특정 SDK의 최소 버전을 지원하도록 하려면 아래에 다음을 추가할 수 있습니다.<app>요소:

    <uses-sdk android:minSdkVersion="14" />
    
  • Android Studio에서 min SDK 버전을 지정하려면 앱의 Gradle 파일을 사용하면 됩니다.

    android{
      defaultConfig{
        minSdkVersion 14
        targetSdkVersion 21
      }
    }
    

저는 이 문제에 부딪혔습니다.버전 번호를 확인하고 Honeycomb보다 크거나 같은 경우에만 액션바를 활성화하고 있었는데 null로 반환되고 있었습니다.values-v11 폴더 아래 style.xml에서 홀로 테마 스타일을 비활성화한 것이 원인이자 근본 원인임을 알게 되었습니다.

AndroidManifest.xml로 이동하여 바꾸기

안드로이드:theme="@style/AppTheme"

by 

안드로이드:theme="@android:style/theme.Holo.Light.Dark Action Bar"

getActionBar() 대신 getSupportActionBar() 사용

제 경우에는 제 코드에 이것이 들어있었지만 작동하지 않았습니다.

@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는 onCreate 메서드에서 가장 먼저 호출해야 합니다.

저도 같은 문제가 있었습니다.styles.xml에서 App 테마를 변경하여 해결하였습니다.

전에

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

끝나고

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

방금 이 문제를 발견했기 때문에 추가하고 싶은 한 가지는 부모가 있는 액티비티에서 ActionBar()를 가져오려고 하면 null이 반환됩니다.Activity Group 내에 내 Activity가 포함된 코드를 리팩터하려고 하는데, ActionBar가 원본에서 생성되는 방법을 살펴본 후 "oh duh"로 이동하는 데 몇 분이 걸렸습니다.

저는 이 변화를 통해 이를 해결합니다.

  1. 사소한 일의 변화android:theme="@android:style/Theme.Holo.Light" >
  2. 수업에 보태다extends ActionBarActivity
  3. 클래스에 가져오기 추가import android.support.v7.app.ActionBarActivity

다른 답변에 추가하기

꼭 전화하세요.setActionBar()아니면setSupportActionBar()당신의onCreate()호출하기 전 메소드getActionBar():

activity.xml에서 일부 도구 모음을 정의한 다음 onCreate():

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

제 경우에는 그냥 연장만 하면 됐습니다.AppCompatActivity대신에Activity

    supportActionBar?.setDisplayHomeAsUpEnabled(true)

전체 활동 예제 클래스:

Android.os 를 가져옵니다.Androidx.appcompat.app 번들 가져오기앱 컴파트 활동

//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

이 질문에 대해 파티에 늦었다는 것(그리고 Android를 처음 접함)을 알고 있지만, 여기 있는 정보가 매우 도움이 된다는 것을 알게 되었고, 저와 같은 다른 사람들이 도움을 요청할 경우에 대비하여 ActionBar를 원하는 대로 작동시킬 수 있도록 노력한 결과를 추가해야겠다고 생각했습니다.

저는 창 제목이 없는 부동창인 위젯을 가지고 있습니다.저는 스타일 테마를 사용하여 구현합니다.android:windowIsFloating,android:backgroundDimEnabled그리고.android:windowNoTitle. 여러 개의 목록 조각 페이지가 있는 조각 호출기를 호출하고 액션바를 사용하는 버튼을 추가하기 전까지는 위젯이 잘 작동했습니다.Null 포인터 예외와 함께 호출기 활동이 중단됩니다.ActionBar를 null로 압축했습니다.이 스레드에 기여한 이전 사람들의 결과에 따라 매니페스트 파일에서 테마를 제거했고 액션바는 잘 작동했지만 이제 창이 더 오래 떠(전체 화면) 내가 원하지 않는 페이지 제목이 있었습니다.

추가적인 조사를 통해 스타일 테마 API 교육 가이드를 통해 해결책을 모색할 수 있었습니다.애플리케이션에 적용하기 전에 매니페스트 파일의 개별 작업에 사용자 지정 테마를 추가할 수 있다는 사실을 알게 되었습니다.이제 모든 창에 원하는 모양이 나타납니다.

Activity 클래스를 ActivityBar Activity에서 확장해 봅니다.이것으로 해결했습니다.다음과 같은 작업을 수행합니다.

public class MyActivity extends ActionBarActivity
{
  . . .

저의 경우에는 액티비티에서만 수업이 확장되었습니다.

이것은 몇몇 사람들에게도 도움이 될 지도 모릅니다.

저의 경우는 menu.xml에서 context를 정의하지 않았기 때문입니다.

시도해 보기:

<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">

명령 클릭으로 소스 코드 구현을 확인하기만 하면 됩니다.

    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());
}

Windows Feature(윈도우 기능)을 요청합니다.FEATION_ACTION_BAR); RequestWindowFeature(윈도우)가 보여 문제를 해결했습니다.FEATION_ACTION_BAR)에 오류가 발생했습니다. 코드가 오픈 소스에서 사용합니다!!

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

일이 아주 빠릅니다.

Fragment에서 이 메서드를 호출하는 경우 이 메서드를 호출합니다.onActivityCreated()

일반적으로 앱의 제목, 탐색 단추 및 기타 앱별 작업을 포함하는 최상위 표시줄인 액션바에 액세스하려고 할 때 사용할 수 없거나 올바르게 설정되지 않은 경우 일반적으로 getActionBar()가 null을 반환하는 문제가 Android에서 발생합니다.가능한 해결책은 다음과 같습니다.

getSupportActionBar() 대신 getSupportActionBar()를 사용합니다. 지원 라이브러리 또는 AndroidX 라이브러리를 사용하는 경우 getActionBar() 대신 getSupportActionBar()를 사용하여 ActionBar에 액세스해야 합니다.이는 getSupportActionBar()가 이전 버전의 Android(안드로이드 3.0 이전 버전)를 대상으로 하는 앱에서만 사용할 수 있는 반면, getSupportActionBar()는 하위 호환성이 있어 여러 Android 버전에서 사용할 수 있기 때문입니다.프로젝트에 적절한 지원 라이브러리 또는 AndroidX 종속성을 포함시켰는지 확인하고 getSupportActionBar()를 사용하도록 코드를 업데이트합니다.

// Using getSupportActionBar() in an AppCompatActivity or a FragmentActivity
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
    // Do something with the actionBar
} else {
    // ActionBar is not available
}

ActionBar가 레이아웃에 설정되어 있는지 확인합니다.작업 표시줄을 사용하려면 레이아웃에서 작업 표시줄을 적절하게 설정해야 합니다.활동의 레이아웃 XML 파일에 ActionBar를 지원하는 테마가 포함되어 있는지 확인하고 적절한 XML 태그를 사용하여 레이아웃 파일에 ActionBar를 정의했는지 확인합니다.예를 들어 <androidx.appcompat>를 사용할 수 있습니다.위젯.Toolbar > 태그 - 레이아웃 XML 파일에서 ActionBar를 정의합니다.

자세한 내용은 여기 devissuefixer.com 에서 확인할 수 있습니다.

언급URL : https://stackoverflow.com/questions/6867076/getactionbar-returns-null

반응형