我有初学者问题。这是我的情况:
我想从主要活动开始一项新活动。启动新活动的代码位于单独的类文件中。我似乎传递了错误的参数,并且在尝试启动新活动时我最终会遇到nullpointerexception。当我将代码放在主活动类文件中时,新活动启动正常,因此第二个活动和清单很好。以下是我的代码示例:
在我的主要活动课中,我实习了第二堂课(这是我的主要活动。因为我不认为这与问题有关,所以我不知道其他人):
Tester mytest = new Tester();
mytest.test(this);
在我的第二课程文件中(这不是一项活动;它是一个在活动中不受影响的类别):
public class Tester extends Activity {
Intent myIntent;
public void test (Context context) {
myIntent = new Intent (Intent.ACTION_VIEW);
myIntent.setClass(context, newActivity.class);
thebutton.setOnClickListener(
new OnClickListener() {
public void onClick(View v) {
startActivity(myIntent);
}
}
):}
当我执行点击时,我会在startactivity时收到nullpointerexception。任何人都可以开心这个吗?我确信我错误地使用了上下文。
答案 0 :(得分:4)
活动以Intents开始。请先阅读Android Application Fundamentals并尝试Hello World应用程序:)
我知道你将不惜一切代价使用你的独立Tester课程;)所以我正在努力适应并帮助你。
首先,不要让您的类继承自Activity。这对你没有帮助,因为这个调用可能没有任何有效的上下文。 Activity以某种方式实现了模板模式,为您提供了onCreate(...)
,onPause(...)
等关键方法,并由Android操作系统实例化。
如果您仍想使用该类,则必须传入上下文。无论如何,你可能正在瞄准一些MVC / MVP模式结构。
public class Tester {
private Context context;
public Tester(Context context){
this.context = context;
}
public void test () {
final Intent myIntent = new Intent(context, NewActivity.class);
//guess this comes from somewhere, hope through a findViewById method
thebutton.setOnClickListener(
new OnClickListener() {
public void onClick(View v) {
context.startActivity(myIntent);
}
}
)};
}
}
这将是我方提出的解决方案。我在这里看到的一个问题是{strong>如何检索该test()
方法中的按钮。为了使其正常工作,您必须从某个View类(使用view.findViewByid(R.id.myButton)
)检索它,或者动态创建它并在活动的onCreate(...)
期间将其与视图关联(可能使用Inflater) )。