我有一个代码模块,它实现了带导航抽屉的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
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)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);
Run Code Online (Sandbox Code Playgroud)
整个代码 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>
Run Code Online (Sandbox Code Playgroud)
机器人:主题= "@风格/ 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()else for android.app类型我们可以使用getActionBar()
3.在清单文件中检查应用于相关活动的主题
示例:在清单文件中,如果应用主题是说android:theme ="@ android:style/Theme.Holo.Dialog"getActionBar()将工作
但如果主题应用于清单中的活动如下android:theme ="@ style/Theme.AppCompat.Light"那么你必须使用getSupportActionBar()
Fun*_*nal 143
你的代码正在抛弃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);
Run Code Online (Sandbox Code Playgroud)
问题很简单 - 你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);
Run Code Online (Sandbox Code Playgroud)
然后在第87行下降,看起来你想出了同样的结果:
getSupportActionBar().setTitle(
Html.fromHtml("<font color=\"black\">" + mTitle + " - "
+ menutitles[0] + "</font>"));
// getActionBar().setTitle(mTitle +menutitles[0]);
Run Code Online (Sandbox Code Playgroud)
请注意你是如何注释掉的getActionBar()
.
cru*_*bio 26
如果有人想使用android.app.ActionBar和android.app.Activity,你应该在styles.xml中更改app主题,例如:
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
Run Code Online (Sandbox Code Playgroud)
问题是你可能正在使用AppCompat主题.
另一方面,如果您想使用android.support.v7.app.ActionBar并使用AppCompatActivity扩展您的活动,则必须使用AppCompat主题来避免此问题,例如:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
Faz*_*zal 17
当你扩展appcompatActivity然后使用
this.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Run Code Online (Sandbox Code Playgroud)
当你扩展ActionBar然后使用
this.getActionBar().setDisplayHomeAsUpEnabled(true);
Run Code Online (Sandbox Code Playgroud)
不要忘记在初始化工具栏/操作栏后在oncreate中调用此函数
小智 11
我想你想要做的是强制转换getActivity().例如:
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
这是您需要使用新的支持库.AppCompatActivity已取代ActionBarActivity.
小智 6
尝试在这里检查
res >>值>> styles.xml
确保没有这样的代码
<item name="windowActionBar">false</item>
Run Code Online (Sandbox Code Playgroud)
如果有类似的代码,您可以暂时禁用或删除它
就我而言,是因为styles.xml
设置了错误的父主题,即NoActionBar
主题当然getSupportActionbar()
为空:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
Run Code Online (Sandbox Code Playgroud)
将其更改为其他内容修复了它:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
Run Code Online (Sandbox Code Playgroud)
使用 AppCompatActivity 时必须调用
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Run Code Online (Sandbox Code Playgroud)
前 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);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
159549 次 |
最近记录: |