【发布时间】:2015-01-26 11:29:19
【问题描述】:
为了减少不同活动之间的冗余代码,我尝试使用共享方法定义一个帮助类,并在我需要时调用它,例如,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 曾经在扩展 Activity 的 a1 类中工作。 这是我得到的:
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)
【问题讨论】:
-
尝试制作你的方法
static -
我不能,因为它有非静态方法(例如 getText)
-
用 PascalCase 规则命名你的类(“Helper”而不是“helper”)。您是否在清单文件中声明了活动?!
-
当然声明了 a1,我应该对 Helper 做同样的事情吗?
-
你的 loadActionBar 方法中哪一行是 21?