3

我有一个初学者的问题。这是我的情况:

我想从主要活动开始一个新活动。启动新活动的代码位于单独的类文件中。我似乎传递了错误的参数,并且在尝试启动新活动时遇到了空指针异常。当我将代码放在主活动类文件中时,新活动启动正常,因此第二个活动和清单很好。这是我的代码示例:

在我的主要活动类中,我实例化了第二类(这是我的主要活动。我省略了其余的,因为我认为这与问题无关):

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。任何人都可以启发我吗?我确定我错误地使用了上下文。

4

1 回答 1

4

活动以Intents开始。请先阅读Android 应用程序基础知识并尝试使用 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);
                }  
              }       
        )};
    }
}

这将是我这边提出的解决方案。我在这里仍然看到的一个问题是如何在该test()方法中检索按钮。为了使其正常工作,您必须从某个 View 类(使用view.findViewByid(R.id.myButton))中检索它或动态创建它并将其与onCreate(...)您的 Activity 期间的视图相关联(可能使用 Inflater)。

于 2010-09-03T13:40:59.260 回答