2011-02-04 3 views
0

ボタンを使用して、選択パラメータを渡された別のクラスに渡し、渡されたパラメータを使用してマップ画面を構築します。私は自分のボタンアクションを働かせることに集中しています。別のクラスを呼び出すために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: 

パブリッククラスClass2には、私はすべてが必要なボタンアクションを除いて働いてい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); 

    } 

を拡張し、次のように私はonCLickListenerとonCLickViewを使用します。私は、Class1.onVlickViewのボタンクリックが、ボタンクリックアクションを使ってClass2.execMapBuildを呼び出すようにします。ボタンをクリックしてアクションをキャプチャし、Class2でexecMapBuildメソッドを呼び出します。しかし、startActivity(intent)からonCreateに移動するときにNullPointerExceptionが発生します。

私はこれを釘打ついくつかの方法を試しましたが、これは最高のようです。私は本当に何が欠けているかも説明していただきありがとうございます。 最初にコピーされなかったコードが追加されました。

答えて

2

@ 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"); 
      ... 
     } 
     ... 
    } 
} 

は、私はまた、あなたがClass1Class2より説明的なクラス名を使用することをお勧めできます:ここではあなたがやるべき事の種類のサンプルです。

+0

ここに窓にコードをコピーするのが私のせいです。実際のコードでは、Class2はMapActivityを拡張しています。 – apesa

+0

同じ原則が適用されますが、 'new'キーワードを使用して直接インスタンス化することはできず、そのメソッドを直接呼び出すことはできません。あなたは 'Intent'を作成し、' startActivity() 'を呼び出す必要があります。 –

+0

実際にClass2はMapActivityを拡張します。私はClass1とClass2をそれをよりきれいにするために置き換えました。私は本当にClass1.onClickViewからClass2.execMapBuildに行う最良の方法を知りたいと思っています。 execMapBuioldでは、ItemizedOverlayのデータを作成します。いったんやったら、私はonCreateに移動したい。私は誰も混乱させないことを願っています。 – apesa

2

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

Activityだった場合でも、コールバックは実行されないので、new Class2()経由で呼び出すことはできません。

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

+0

私はこれを試してみます。あなたの言ってる事がわかります。私はexecBuildMapにすべてを従えることができますが、startActivity()インテントの後はNUllPointerExceptionを除いて – apesa

+0

ありがとう、ありがとうございます。 – apesa

関連する問題