簡體   English   中英

在onCreate()方法之外,getActionBar()為null

[英]getActionBar() is null outside the onCreate() method

情況:我正在使用Skype開發類似於UI的聊天應用程序。 聯系人回收者視圖在左側。 我有基於自定義ActionBar的主題。

我需要在ActionBar onClick中設置標題。

因此,基本上,onClick方法位於適配器中。 聯系人的OnClick,該方法將通過ActionBar傳遞給Activity,並且聯系人的名稱應位於標題中。

getActionBar()可以完美運行,並且Title是在onCreate方法中設置的。 但是,當我在onCreate之外的方法中執行相同操作時,應用程序崩潰。 在這里這里都引用了鏈接,但無法解決我的問題。

請同樣指導我。

例:

ChatActivity extends Activity {

    //..onCreate here

    if(getActionBar() != null) {
        String title = " Chat: ";

        if(userName != null) {
            title = title + userName;
        }

        getActionBar().setTitle(title);
    }

    // onCreate finishes

    // onContactChange    
    public void onContactChange(int position, ContactsVO addContact) {            
        userName = addContact.getName().toString();
        String url = addContact.getDP();

        if(getActionBar() != null) {     //App crashes here
            String title =" Chat: ";

            if(userName != null)
                title = title + userTo;

            getActionBar().setTitle(title);
        }
    }
}

調用異步任務后,Web服務將返回在適配器中設置的數據。

現在,在適配器中

ChatActivity c1 = new ChatActivity();

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    ContactsVO contactsvo = data.get(position);

    holder.tv.setText(contactsvo.getName());
    String url = contactsvo.getDP();

    Glide.with(getContext())
            .load(url)
            .crossFade()
            .into(holder.img);


    holder.row.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            c1.onContactChange(position,contactsvo);    //method called here.
        }
    });
}

堆棧跟蹤

E / ACRA:ACRA捕獲了com.chat生成報告的NullPointerException異常。 11-20 15:51:23.278 12797-12941 /? E / ACRA:com.chat致命錯誤:嘗試在null對象引用java.lang.NullPointerException上調用虛擬方法'android.view.View android.view.Window.getDecorView()':嘗試調用虛擬方法'android。 com上android.app.Activity.getActionBar(Activity.java:2339)上android.app.Activity.initWindowDecorActionBar(Activity.java:2397)上的空對象引用上的view.View android.view.Window.getDecorView()' .chat.activities.ChatActivity.onContactChange(ChatActivity.java:276)在com.chat.utilities.adapters.ChatCustomAdapter $ 1.onClick(ChatCustomAdapter.java:74)在android.view.View.performClick(View.java:5678)在android.os.Handler.dispatchMessage(Handler.java:103)在android.os.Handler.handleCallback(Handler.java:836)在android.view.View $ PerformClick.run(View.java:22667) android.app.ActivityThread.main(ActivityThread.java:6293)處的os.Looper.loop(Looper.java:203)com.android.internal.os處的java.lang.reflect.Method.invoke(Native Method)處的os.Looper.loop(Looper.java:203)。 ZygoteInit $ MethodAndArg com.android.internal.os.ZygoteInit.main(ZygoteInit.java:926)上的sCaller.run(ZygoteInit.java:1065)

請指導我解決相同的問題。

我的建議是將setSupportActionBar()用於整個活動。 在您的布局中。

 <android.support.v7.widget.Toolbar
        android:id="@+id/home_activity_toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:layout_scrollFlags="scroll|enterAlways" />


//OnCreate

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home_page);

    toolbar = (Toolbar) findViewById(R.id.home_activity_toolbar);
    configureHomeToolBar();
}


private void configureHomeToolBar() {

    toolbar.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.colorPrimary));
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setDisplayShowTitleEnabled(false);
    getSupportActionBar().setIcon(R.drawable.my_logo);
    getSupportActionBar().setDisplayHomeAsUpEnabled(false);
}

然后,您可以通過在活動中的任何地方調用getSupportActionBar()來使用它,例如:

getSupportActionBar().setDisplayUseLogoEnabled(false);
getSupportActionBar().setTitle(titlesArray[someIndex]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM