0

ボタンのクリックを使用して、渡されたパラメーターを使用してマップ画面を作成する別のクラスに選択パラメーターを渡したいと考えています。ボタンアクションを機能させることに集中しています。私は次のように onClickListener と onClickView を使用しています

Class1:

public class Class1  extends Activity implements OnClickListener {

    Class2 class2;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

..........

       Button button = (Button)findViewById(R.id.btn_configup1);
        button.setOnClickListener(this);        
   }

    public void onClick(View v) {
        Class2 class2 = new Class2();
        //Save state.. selections and params and use bundle
        //to pass into class2
        class2.execMapBuild();

    }    


}


Class2:

public class Class2 extends MapActivity {

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.drawable.navup);
}


public void execMapBuild() {    
        finish(); //just in case we return.
        Intent intent = new Intent(CLass2.this, Class2.class);
        startActivity(intent);

    }

目的のボタン アクション以外はすべて機能しています。Class1.onVlickView のボタン クリックで、ボタン クリック アクションを使用して Class2.execMapBuild を呼び出す必要があります。ボタンをクリックしてアクションをキャプチャし、Class2 で execMapBuild メソッドを呼び出します。しかし、startActivity(intent) から onCreate に移動すると、NullPointerException が発生します。

私はこれを突き止めるために他のいくつかの方法を試しましたが、これが最善のようであり、私はそれを理解することに近づいているようです. 私が見逃している可能性のあるものの説明を本当にいただければ幸いです。最初にコピーされなかったコードを追加しました。

4

2 に答える 2

3

@Heiko Rupp の回答を拡張するにClass2は、マップを表示する場合は、のようなものを拡張する必要がありますActivity。そのため、通常のメソッドで呼び出すことはできません。Activityマニフェストにを登録してから、 を使用して呼び出す必要がありますIntent。以下は、実行する必要がある種類のサンプルです。

public class Class1 extends Activity implements OnClickListener {

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        Button button = (Button)findViewById(R.id.btn_configup1);
        button.setOnClickListener(this);        
   }

    public void onClick(View v) {
        Intent intent = new Intent(Class1.this,Class2.class);
        intent.putExtra("key","data");
        ...
        startActivity(intent);
    }
}

public class Class2  extends MapActivity {

    String mData;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            mData = extras.getString("key");
            ...
        }
        ...
    }
}

Class1やよりもわかりやすいクラス名を使用することをお勧めしますClass2

于 2011-02-04T21:18:41.940 に答える
2

Class2はアクティビティではないため、アクティビティのコールバックはシステムによって呼び出されません。

また、がの場合、コールバックが実行されないため、Activityを介して呼び出すことはできません。new Class2()

Intentこれをクリーンアップしてから、内で行っているように、Class1からClass2アクティビティを開始してくださいexecMapBuild()

于 2011-02-04T20:50:24.307 に答える