我有一个代码模块,它使用导航抽屉实现viewpager,但是,当我运行代码时,我得到以下错误
01-26 09:20:02.958: D/AndroidRuntime(18779): Shutting down VM
01-26 09:20:02.959: E/AndroidRuntime(18779): FATAL EXCEPTION: main
01-26 09:20:02.959: E/AndroidRuntime(18779): Process: com.example.tabwithslidingdrawer, PID: 18779
01-26 09:20:02.959: E/AndroidRuntime(18779): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.tabwithslidingdrawer/com.example.tabwithslidingdrawer.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)' on a null object reference
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2314)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2388)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.ActivityThread.access$800(ActivityThread.java:148)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.os.Handler.dispatchMessage(Handler.java:102)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.os.Looper.loop(Looper.java:135)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.ActivityThread.main(ActivityThread.java:5312)
01-26 09:20:02.959: E/AndroidRuntime(18779): at java.lang.reflect.Method.invoke(Native Method)
01-26 09:20:02.959: E/AndroidRuntime(18779): at java.lang.reflect.Method.invoke(Method.java:372)
01-26 09:20:02.959: E/AndroidRuntime(18779): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
01-26 09:20:02.959: E/AndroidRuntime(18779): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
01-26 09:20:02.959: E/AndroidRuntime(18779): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)' on a null object reference
01-26 09:20:02.959: E/AndroidRuntime(18779): at com.example.tabwithslidingdrawer.MainActivity.onCreate(MainActivity.java:95)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.Activity.performCreate(Activity.java:5953)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1128)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2267)
01-26 09:20:02.959: E/AndroidRuntime(18779): ... 10 more
09:20:02.959: E/AndroidRuntime(18779): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)' on a null object reference 01-26 09:20:02.959: E/AndroidRuntime(18779): at com.example.tabwithslidingdrawer.MainActivity.onCreate(MainActivity.java:95)
指向此行
// enabling action bar app icon and behaving it as a toggle button
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
整个代码 http://pastebin.com/u1K72fr7
我的清单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.tabwithslidingdrawer"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.Tabwithpager" >
<activity
android:name="com.example.tabwithslidingdrawer.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
android:theme =“@ style / Theme.Tabwithpager”
代码 的 http://pastebin.com/EFQLzRej
=============================================== =================== 修改/更新:
我从中学到了什么
每当发生此类错误时
1。检查正在使用哪种Activity,是简单的android.app Activity还是AppCompatActivity或ActionBarActivity等等。
2。检查您的活动类型是否属于compat类别
示例基于android.app的Activity / Fragment是非appCompat类型, 而android.support.v4.app.Fragment或android.support.v4.app.ActivityCompat 是基于appCompat的
如果它属于appCompat,我们使用getSupportActionBar() 对于android.app类型,我们可以使用getActionBar()
第3。检查清单文件中适用于相关活动的主题
例如: 在清单文件中,如果应用主题是说 机器人:主题= “@安卓风格/ Theme.Holo.Dialog” getActionBar()将起作用
但是如果在清单中为活动应用的主题如下 机器人:主题= “@风格/ Theme.AppCompat.Light” 然后你必须使用 getSupportActionBar()
答案 0 :(得分:141)
您的代码正在使用com.example.tabwithslidingdrawer.MainActivity.onCreate(MainActivity.java:95)
:
// enabling action bar app icon and behaving it as toggle button
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
问题非常简单 - 您的Activity
继承自新的android.support.v7.app.ActionBarActivity
。您应该使用getSupportActionBar()
而不是getActionBar()
来打电话。
如果您查看代码第65行的上方,您会发现您已经这样做了:
actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
// TODO: Remove the redundant calls to getSupportActionBar()
// and use variable actionBar instead
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
然后在第87行下降,看起来你想出了同样的结果:
getSupportActionBar().setTitle(
Html.fromHtml("<font color=\"black\">" + mTitle + " - "
+ menutitles[0] + "</font>"));
// getActionBar().setTitle(mTitle +menutitles[0]);
注意您如何评论getActionBar()
。
答案 1 :(得分:26)
如果有人想使用 android.app.ActionBar 和 android.app.Activity ,您应该更改 styles.xml 中的应用主题,例如:
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
问题是您可能正在使用 AppCompat 主题。
另一方面,如果您想使用 android.support.v7.app.ActionBar 并使用 AppCompatActivity 扩展您的活动,那么您必须使用 AppCompat 主题可以避免此问题,例如:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
希望这会有所帮助。
答案 2 :(得分:15)
当扩展appcompatActivity 时,请使用
this.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
当扩展ActionBar 时,请使用
this.getActionBar().setDisplayHomeAsUpEnabled(true);
不要忘记在初始化工具栏/操作栏
后在oncreate中调用此函数答案 3 :(得分:11)
我认为你想要做的就是施放getActivity()。例如:
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
这是您需要对新支持库执行的操作。 AppCompatActivity取代了ActionBarActivity。
答案 4 :(得分:5)
尝试检查
res&gt;&gt;值&gt;&gt; styles.xml 强>
确保没有像这样的代码
<item name="windowActionBar">false</item>
如果有类似的代码,您可以暂停一段时间,或将其删除
答案 5 :(得分:2)
通常为低级别活动激活“向上”按钮。在您的清单中,我只看到MainActivity。
我不认为激活主要活动的向上按钮是有意义的。
创建一个活动,然后在清单中添加parentActivityName属性。
然后激活活动的onCreate方法上的向上按钮
这应该有所帮助。
https://developer.android.com/training/appbar/up-action.html
答案 6 :(得分:2)
使用AppCompatActivity时必须调用
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
在getSupportActionBar()
之前
public class PageActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_item);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
this.getSupportActionBar().setDisplayHomeAsUpEnabled(false);
}
}
答案 7 :(得分:2)
在我的情况下,我遇到了同样的错误,但我的错误是我没有声明我的工具栏。
所以,在我使用getSupportActionBar之前,我必须找到我的工具栏并设置actionBar
appbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(appbar);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_nav_menu);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
答案 8 :(得分:1)
在我的情况下是因为styles.xml
设置了错误的父主题,即NoActionBar
主题当然是getSupportActionbar()
为空:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
将其更改为修复它的其他内容:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
答案 9 :(得分:1)
尝试此希望它可以工作,我的代码可以正常工作
result = weather_df.groupby('id').agg({
'temperature': max_repeated_nans,
'wind_speed': max_repeated_nans
})
答案 10 :(得分:1)
在您的活动中的这一行:
super.onCreate(savedInstanceState);
setContentView(R.layout.Activity_Main);
使用它:
super.onCreate(savedInstanceState);
setContentView(R.layout.*);
*
是您的活动
答案 11 :(得分:1)
如果您使用的是android.app.ActionBar和android.app.Activity,则应更改应用程序标记中的应用主题:
&LT;应用
机器人:主题= “@机器人:风格/ Theme.Holo.Light” &GT;
答案 12 :(得分:1)
对于拥有BaseActivity的任何其他人以及从中扩展的子项,请确保在执行任何操作之前先调用super.onCreate()。如果您之后调用了super.onCreate(),则旧的Activity将起作用。
@Override
protected void onCreate(Bundle savedInstanceState)
{
getActionBar().setDisplayHomeAsUpEnabled(true);
super.onCreate(savedInstanceState);
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState); //do this first
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
答案 13 :(得分:0)
对于仍然遇到此问题的人,我的问题已在AndroidManifest.xml文件中得到解决。在显示<activity android:name=".MainActivity" android:theme="@style/AppTheme.NoActionBar">
的位置时,您需要删除NoActionBar
,使其成为<activity android:name=".MainActivity" android:theme="@style/AppTheme">
,因为使用NoActionBar设置时,应用程序无法知道当您在内部调用一个操作栏时是否需要操作栏MainActivity.java
答案 14 :(得分:0)
我得到了同样的错误,我为默认工具栏(toolbar.xml)创建了一个模板,然后在另一个视图中创建了一个可折叠的工具栏。
我需要将可折叠工具栏添加到显示用户的一些信息的视图(如whatsapp),但方法findViewById引用默认工具栏(id工具栏),而不是可折叠的工具栏(ID工具栏也是)是,我在两个工具栏中写了相同的ID,所以当我尝试访问该活动时,应用程序崩溃,向我显示错误。
我通过将可折叠工具栏的ID更改为id:col_toolbar来修复错误,错误消失了,我的应用程序运行良好
答案 15 :(得分:0)
我知道这个问题已经过时了。但这可以帮助许多提出这个问题的人。
要解决此问题,请检查是否存在无效点。然后应用相应的配置:
if(getSupportActionBar() != null){
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
}
答案 16 :(得分:0)
您应该尝试这个。我认为它将起作用。
Toolbar toolbar = findViewById(R.id.toolbar1);
setSupportActionBar(toolbar);
mDrawerLayout = findViewById(R.id.drawer_layout);
mDrawerLayout = findViewById(R.id.drawer_layout);
mDrawerLayout.setDrawerShadow(R.drawable.rectagle_with_black_outer,
GravityCompat.START);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
toolbar, R.string.navigation_drawer_close,
R.string.navigation_drawer_close) {
public void onDrawerClosed(View view) {
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
invalidateOptionsMenu();
}
};
答案 17 :(得分:0)
最佳解决方案 在您的Oncreate方法中执行此操作
ActionBar actionBar = getSupportActionBar();
if(actionBar != null){
actionBar.setDisplayHomeAsUpEnabled(true);
}
后面有一个新班
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if(id == android.R.id.home){
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
答案 18 :(得分:0)
如果遇到此错误
Button TranslateBtn = findViewById(R.id.TranslateBtn);
只需使用
setSupportActionBar(工具栏)。
答案 19 :(得分:0)
请在brown.tagged_sents(categories='romance')[501:600]
from nltk.corpus import brown
import nltk
# Romance
brown_tagged_sents = brown.tagged_sents(categories='romance')[:500]
brown_sents = brown.sents(categories='romance') # not sure what this line is doing here
unigram_tagger = nltk.UnigramTagger(brown_tagged_sents)
unigram_tagger.evaluate(brown.tagged_sents(categories='romance')[501:600])
答案 20 :(得分:0)
我是Android App开发的新手。我遇到了这个错误,花了将近5个小时来修复它。最后,我发现以下是导致此问题的根本原因,如果以后有人再次遇到此问题,请仔细阅读。
我试图创建一个带有视频背景的家庭活动,为此,我不得不将父主题从默认设置Theme.AppCompat.Light.DarkActionBar
更改为Theme.AppCompat.Light.NoActionBar
。这对于Home Activity来说效果很好,但是当我使用onclicklistener设置一个新按钮以导航到另一个我在操作栏上设置了自定义文本的Activity时,就会抛出此错误。
所以,我最终要做的是创建两个主题,并将它们分配给以下活动。
Theme.AppCompat.Light.DarkActionBar - for Activities with Action Bar (default)
Theme.AppCompat.Light.NoActionBar - for Activities without Action Bar
我进行了以下更改以修正错误。
在styles.xml中定义主题
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="DefaultTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
将活动与AndroidManifest.xml
<activity android:name=".Payment"
android:theme="@style/DefaultTheme"/>
<activity android:name=".WelcomeHome"
android:theme="@style/AppTheme.NoActionBar">
答案 21 :(得分:-1)
每当发生此类错误时。尝试检查关注的事情
检查正在使用哪种活动,它是简单的android.app活动还是AppCompatActivity或ActionBarActivity等。
检查您扩展的活动类型是否属于兼容类别
基于android.app的Activity / Fragment示例不是appCompat类型,而android.support.v4.app.Fragment或android.support.v4.app.ActivityCompat都是基于appCompat的
如果它属于appCompat,我们使用getSupportActionBar(),否则,对于android.app类型,我们可以使用getActionBar()
示例:在清单文件中,如果应用了主题,则说android:theme =“ @ android:style / Theme.Holo.Dialog” getActionBar()将起作用
但是如果清单中用于活动的主题如下android:theme =“ @ style / Theme.AppCompat.Light”,那么您必须使用getSupportActionBar()
答案 22 :(得分:-1)
如果您创建了一个新的工具栏,则 应用检查您是否已应用方法setSupportActionBar(); 它会毫无帮助的
答案 23 :(得分:-3)
尝试这样做:
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
而不是:
actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);