1

アンドロイドのアクティビティ間で1つ以上の変数を渡したいとします。一つの解決策は、グローバル変数を使用することであり、それがここで説明されていますアクティビティ間の変数の受け渡し


あなたは基本android.app.Applicationクラスを拡張し、そのようにメンバ変数を追加することができます:

私はここに繰り返すこと Android global variable

// set 
((MyApplication) this.getApplication()).setSomeVariable("foo"); 

// get 
String s = ((MyApplication) this.getApplication()).getSomeVariable(); 

public class MyApplication extends Application { 

private String someVariable; 

public String getSomeVariable() { 
    return someVariable; 
} 

public void setSomeVariable(String someVariable) { 
    this.someVariable = someVariable; 
} 
} 

は、その後、あなたの活動に、あなたはそうのような変数を取得および設定することができます

これを使用して、ListViewの項目が押されたときに、自分のアクティビティの1つにグローバル変数を設定したいと考えています。だから私はこのコードを持っている:

lv.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, 
      int position, long id) { 
      . 
      . 
      . 

      ((MyApplication) this.getApplication()).setSomeVariable("foo"); 
     } 

     }); 

私はというエラーを取得しかし、「方法getApplicationは()型の新しいAdapterView.OnItemClickListener(){}のために定義されていません」。

私はこのエラーが発生する理由とその修正方法、または1つのアクティビティから別のアクティビティに変数を渡すより良い方法を知りたいと思います。

おかげで、

TJ

答えて

4

匿名クラス内では、これは言うことができません。内部クラスのクラスを指定する必要があります。 MyApplication.this.getよう

..

使用して: "この"

class MyApplication { 
    lv.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, 
      int position, long id) { 
      ((MyApplication) MyApplication.this.getApplication()).setSomeVariable("foo"); 
     } 
} 

} 

を内部クラスの内部を参照する有名な内部クラスの内部にある。

+0

MyApplicationは、setSomeVariable()を使用する場所とは異なるクラスです。私はMyOtherApplicationの中でそれをやりたいと思っていますが、setSomeVariableメソッドはMyApplicationで定義されています。だからあなたが示唆したものは、そのまま働いているわけではありません。 – TJ1

+0

それは完全に私が書いたコードで、 "getApplication()"あなたがあなたがMyOtherApplication.thisを書く必要があるクラスMyOtherApplicationの中にあなたが望むクラスを得るメソッドを書いています...あなたがannonymousクラスの中でそれを呼び出すので、キーワード "this"は内部クラスを参照します。 – Michele

0

あなたは(使用MyClass.this.getApplicationを持っている)あなたは、MyClassののメンバ関数に匿名OnItemClickListenerを定義した場合。 OnItemClickListenerはアプリケーションについて認識しません。

+0

私がMyClass.this.getApplication()を使用したとき、「アプリケーションからMyApplicationにキャストできません」という別のエラーが表示されます。 – TJ1

0

私はあなたがそれをキャストする必要はないと思う...アプリケーションは既にそこにある。

MyApplication.getSomeVariable(); 

は他のどのクラスと同様に動作します。

関連する問題