为了减少不同活动之间的冗余代码,我正在尝试使用共享方法定义一个帮助器类,并在我需要时调用它,例如,我在这里阅读Calling methods from other classes in Android。仍然无法使其发挥作用。这段代码出了什么问题?
helper.class(我为操作栏设置了自定义视图并定义了向上意图)
public class helper extends Activity {
public void loadActionBar(ActionBar ab, int icon, int t) {
ab.setCustomView(R.layout.custom_actionbar);
View v = ab.getCustomView();
TextView title = (TextView)v.findViewById(R.id.ab_title);
title.setText(getText(t));
ImageView logo = (ImageView)v.findViewById(R.id.ab_logo);
logo.setImageResource(icon);
logo.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = getParentActivityIntent();
startActivity(i); }
}
);
ab.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_HOME);
ab.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
ab.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
}
}
a1.class(我的活动)
public class a1 extends helper {
private helper helper = new helper();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.a1);
helper.loadActionBar(getActionBar(), R.drawable.action_back, R.string.title_a1);
}
}
我正在传递所有相关代码。方法loadActionBar用于在类a1中扩展Activity时工作。 这是我得到的:
11-27 20:19:59.662 7618-7618/com.tinix.prova1 E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tinix.prova1/com.tinix.prova1.a1}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2255)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2309)
at android.app.ActivityThread.access$700(ActivityThread.java:157)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1289)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:5317)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.content.ContextWrapper.getResources(ContextWrapper.java:89)
at android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:78)
at android.content.Context.getText(Context.java:323)
at com.tinix.prova1.helper.loadActionBar(helper.java:21)
at com.tinix.prova1.a1.onCreate(a1.java:43)
at android.app.Activity.performCreate(Activity.java:5326)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2218)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2309)
at android.app.ActivityThread.access$700(ActivityThread.java:157)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1289)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:5317)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:0)
因为你的例外是:
无法开始活动 ComponentInfo {com.tinix.prova1 / com.tinix.prova1.a1}: 显示java.lang.NullPointerException
请确保您的布局内有:R.layout.custom_actionbar
标识为TextView
ab_title
<TextView
android:id="@+id/ab_title"
title在这里为空:
title.setText(getText(t));
答案 1 :(得分:0)
我终于解决了自己的问题。
通过不在主活动中显式调用Helper类 - 无论是private Helper helper = new Helper();
还是调用Helper中存储的方法,都可以正常工作。
例如,在我的onCreate中,我只需拨打loadActionBar
- 而不是Helper.loadActionBar
。
现在看起来很明显,因为我的活动实际上是extends
Helper类。
尽管如此,我不知道为什么我在title.setText(getText(t));
上检测到空问题。我看不出与此有任何关系。
如果有人能提供答案,这对其他用户来说会更有用。在接受这个答案之前我会等一段时间。