2012-01-04 7 views
4

アンドロイドアクティビティのケースを考えるとき、最初の作業方法はonCreateメソッドです。アンドロイドアクティビティクラスコンストラクタ作業

私はアンドロイドのアクティビティクラスに2つのパラメータ、たとえばUserHomeを渡したいとします。そのためには、アクティビティクラスUserHomeのコンストラクタを作成し、パラメータを受け入れます。

アクティビティクラスを初期化していないアクティビティを呼び出すときは、UserHomeクラスのインテントを作成するだけです。

次に、intent.putExtra("keyName", "somevalue");の使用法を使用せずに、別のアクティビティからそのアクティビティにパラメータを渡すことができます。

専門家は、このような状況をどのようにカバーできるかを明確にしてください。

+1

putExtraを使用してパラメータを渡したくない理由は、そのデータを1つのアクティビティから別のアクティビティに渡すために使用します。 –

答えて

7

インテントパラメータを使用しない理由がわかりません。それが彼らのためにあるのです。アプリケーションのさまざまな場所から同じパラメータを渡す必要がある場合は、インテントリクエストを作成する静的コンストラクタを使用することを検討できます。私はあなたが合格の標準的な方法を使用することができないだろう1つの状況を見ることができます

ParameterizedActivity.startActivity(this, "First Parameter", "Second Parameter");

+0

nice ..itはうまくいきました..実り多いです.. –

+0

@Chase:ずっと前に尋ねられましたが、私は応答を得ることを望みます。私はこのメソッドを使用しようとしていますが、アクティビティのParameterizedActivityを呼び出すためのコールでコンテキストパラメータ(this)のNullPOinterExceptionが発生します。どんなアイデアが間違っているのでしょうか? – Monica

+0

渡されたContextオブジェクトがnullでないことを確認してください。コンテキスト参照を保持している場合は、まだ有効であることを確認してください。オリエンテーションの変更などの設定の変更で、アクティビティが破棄され再作成されることを忘れないでください。 – Chase

0

しかし、あなたはまた、非常によくUSERHOMEのコンストラクタを作成することができます。

public class MainActivity extends Activity { 
UserHome userHome = new UserHome(param1,param2); 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
userHome.yourMethod(); 
}} 

あなたはそれがコンストラクタを初期化することはできませんだと思いますか?... MainActivityは、他のようなクラスですなぜそれが持つことができるので、まさにそれが、活動を拡張するだけでなく、クラスのプロパティを保持し、コンストラクタ、メソッド、メンバー。

+1

UserHomeはまさに別のクラスです。しかし、あなたが作成するUserHomeのインスタンスは、Androidシステムが使用するインスタンスではありません。 –

3

:あなたはそれから呼び出すことによって、あなたの活動を起動することができ

/** 
* Sample activity for passing parameters through a static constructor 
* @author Chase Colburn 
*/ 
public class ParameterizedActivity extends Activity { 

    private static final String INTENT_KEY_PARAM_A = "ParamA"; 

    private static final String INTENT_KEY_PARAM_B = "ParamB"; 

    /** 
    * Static constructor for starting an activity with supplied parameters 
    * @param context 
    * @param paramA 
    * @param paramB 
    */ 
    public static void startActivity(Context context, String paramA, String paramB) { 
     // Build extras with passed in parameters 
     Bundle extras = new Bundle(); 
     extras.putString(INTENT_KEY_PARAM_A, paramA); 
     extras.putString(INTENT_KEY_PARAM_B, paramB); 

     // Create and start intent for this activity 
     Intent intent = new Intent(context, ParameterizedActivity.class); 
     intent.putExtras(extras); 
     context.startActivity(intent); 
    } 

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

     // Extract parameters 
     Bundle extras = getIntent().getExtras(); 
     String paramA = extras.getString(INTENT_KEY_PARAM_A); 
     String paramB = extras.getString(INTENT_KEY_PARAM_B); 

     // Proceed as normal... 
    } 
} 

:たとえば

Intentのパラメータ:別のアプリから起動されるアクティビティ(たとえば、Taskerプラグインの編集アクティビティ)を作成するときに、012を制御できない場合あなたの活動を開始する

コンストラクタでパラメータを受け入れるActivityを作成することは可能です。それを使用するトリックは、しかし、それを直接使用することではなく、のような、適切な引数でsuper()を呼び出すデフォルトコンストラクタで派生クラスを使用するのではありません。

class BaseActivity extends Activity 
{ 
    public BaseActivity(String param1, int param2) 
    { 
     // Do something with param1 and param2. 
    } 
    // Many more lines of awesomeness. 
} 

class DerivedActivity extends BaseActivity 
{ 
    public DerivedActivity() 
    { 
     super("param1", 42); 
    } 
} 

当然、あなたが生成する必要がある場合パラメータをBaseActivity()に渡す場合は、ハードコードされた値を関数呼び出しで置き換えることができます。