getActionBar()在onCreate()方法

时间:2017-11-20 10:25:39

标签: java android android-actionbar

情况: 我正在与Skype一起制作聊天应用程序。联系人回收站视图位于左侧。 我有基于ActionBar的自定义主题。

我需要在ActionBar onClick上设置标题。

所以,基本上,onClick方法在Adapter中。单击联系人时,该方法将传递给具有ActionBar的Activity,并且联系人的姓名应该出现在标题中。

getActionBar()运行完美,T​​itle在onCreate方法中设置。但是,当我在onCreate之外的方法中执行相同操作时,app会崩溃。 我提到了链接herehere,但我无法解决我的问题。

请指导我。

示例:

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

调用异步任务,webservice返回适配器中设置的数据。

现在, 在适配器中,

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   致命错误:尝试调用虚拟方法' android.view.View   android.view.Window.getDecorView()'在null对象引用上                                            java.lang.NullPointerException:尝试调用虚方法   ' android.view.View android.view.Window.getDecorView()'在null   对象参考                                                在android.app.Activity.initWindowDecorActionBar(Activity.java:2397)                                                在android.app.Activity.getActionBar(Activity.java:2339)                                                在com.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.view.View $ PerformClick.run(View.java:22667)                                                在android.os.Handler.handleCallback(Handler.java:836)                                                在android.os.Handler.dispatchMessage(Handler.java:103)                                                在android.os.Looper.loop(Looper.java:203)                                                在android.app.ActivityThread.main(ActivityThread.java:6293)                                                at java.lang.reflect.Method.invoke(Native Method)                                                在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1065)                                                在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:926)

请指导我解决同样的问题。

1 个答案:

答案 0 :(得分:0)

我的建议是使用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]);