3

初心者の問題があります。これが私の状況です:

メインアクティビティから新しいアクティビティを始めたいです。新しいアクティビティを起動するためのコードは、別のクラスファイルにあります。間違った引数を渡しているようで、新しいアクティビティを起動しようとするとnullpointerexceptionが発生します。コードをメインアクティビティクラスファイルに配置すると、新しいアクティビティが正常に起動するため、2番目のアクティビティとマニフェストは正常に起動します。これが私のコードのサンプルです:

私が2番目のクラスを開始する私のメインアクティビティクラス(これは私のメインアクティビティです。問題に関連しているとは思わないため、残りを省略しました):

Tester mytest = new Tester();
mytest.test(this);

私の2番目のクラスファイル(これはアクティビティではありません。アクティビティでインスタンス化されるクラスです):

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

アクティビティはインテントから始まります。最初にAndroidアプリケーションの基礎を読んで、 HelloWorldアプリを試してください:)

私はあなたがすべての費用であなたの別々のテスタークラスを使うことを理解しました;)それで私はそこに適応してあなたを助けようとしています。

まず、クラスにActivityを継承させないでください。これは役に立ちません。この呼び出しにはおそらく有効なコンテキストがないためです。アクティビティはどういうわけかテンプレートパターンonCreate(...)を実装し、などのキーメソッドを提供onPause(...)し、AndroidOSによってインスタンス化されます。

それでもクラスを使用する場合は、コンテキストを渡す必要があります。とにかく、おそらくあなたはいくつかの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(...)、アクティビティの実行中に(おそらくInflaterを使用して)ビューに関連付ける必要があります。

于 2010-09-03T13:40:59.260 に答える