【发布时间】:2017-11-20 10:25:38
【问题描述】:
情况: 我正在使用类似 UI 的 Skype 制作聊天应用程序。联系人回收站视图位于左侧。 我有基于自定义 ActionBar 的主题。
我需要在 ActionBar onClick 中设置标题。
所以,基本上,onClick 方法在适配器中。联系人的OnClick,该方法通过ActionBar传递给Activity,并且联系人的名字应该在标题中。
getActionBar() 运行完美,并且在 onCreate 方法中设置了 Title。但是,当我在 onCreate 之外的方法中执行相同操作时,应用程序会崩溃。 我引用了链接here 和here,但我无法解决我的问题。
请指导我。
示例:
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);
}
}
}
Async Task被调用,webservice返回Adapter中设置的数据。
现在, 在适配器中,
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()' 在空对象引用上 java.lang.NullPointerException:尝试调用虚拟方法 'android.view.View android.view.Window.getDecorView()' 为空 对象引用 在 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) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1065) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:926)
请指导我解决同样的问题。
【问题讨论】:
-
你需要先设置setSupportActionbar(toobar)
-
onCreate 之外在哪里?如果它在生命周期中 onCreate 之前调用的任何方法中,则视图尚未创建,您无法加载操作栏
-
setcontentview 之后的 onCretae
-
@Shachi 也许如果您添加了请求的信息,这不会是重复的。当您没有足够的信息并且只有一点点代码和 NPE 堆栈跟踪时,这会导致重复。添加更多代码,添加崩溃发生时的实际代码,而不是说“当我将它放在方法中时它不起作用”。 什么方法?? 怎么调用的?由于顺序和线程,时间和方式很重要。
标签: java android android-actionbar