2016-08-18 3 views
0

アクティビティからインテント別のアクティビティに行くとき、どのようにクラスローダー名を取得できますか? クラスローダーの名前が必要です。 私の意図が明確でない場合は、このコードを見てください。インテントのクラスローダーを取得します。私はfirstActivityの名前にsecondActivityのtextViewを設定したい(実際には私はクラスローダ名が必要です)

私はこの質問のテストアプリケーションを作成しました。 3つのアクティビティがあります。 ActivityA、ActivityBおよびActivityC。 ActivityAとActivityBにactivityCを開始するボタンがあります。

ActivityA:

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.layout_a); 

     Button btnGoFromActivityAToActivityC = (Button) findViewById(R.id.btnGoFromActivityAToActivityC); 

     btnGoFromActivityAToActivityC.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       // TODO Auto-generated method stub 
       Intent intent = new Intent(ActivityA.this, ActivityC.class); 
       startActivity(intent); 

      } 
     }); 
    } 

ActivityB:

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.layout_b); 

     Button btnGoFromActivityBToActivityC = (Button) findViewById(R.id.btnGoFromActivityBToActivityC); 

     btnGoFromActivityBToActivityC.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       // TODO Auto-generated method stub 
       Intent intent = new Intent(ActivityB.this, ActivityC.class); 
       startActivity(intent); 

      } 
     }); 
    } 

ActivityC:ActivityCで

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.layout_c); 

     TextView textViewNameOfFirstActivity = (TextView) findViewById(R.id.textViewNameOfFirstActivity); 

    if (/* if we came from ActivityA */) 
    { 
     textViewNameOfFirstActivity.setText("You came from ActivityA"); 
    } 

    else if (/* if we came from ActivityB */) 
    { 
     textViewNameOfFirstActivity.setText("You came from ActivityB"); 
    } 
    } 

ルック...

私はこれをどのように行うことができますか?

答えて

2

ClassLoaderは、あなたのロードされた内容を教えてくれません。Activity; loading Classesです。

より良いアプローチは、それを誰が開いたかを示すActivity Cに何らかの情報を送ることです。例えば

活動A:

Intent intent = new Intent(ActivityA.this, ActivityC.class); 
intent.putExtra("from", "Activity A"); 
startActivity(intent); 

そして、あなたがその値になるだろうActivity CのごonCreate(Bundle)方法で:

@Override 
public void onCreate(Bundle savedInstance){ 
    .... 

    String fromActivity = getIntent().getStringExtra("from"); 

    textViewNameOfFirstActivity.setText(fromActivity); 
} 
+0

まあ、実際にそれは良いアイデアだ..しかし、あなたが知っているように、意図はなりますクラス内で実行されます。つまり、ボタンをクリックすると、最初にクラスが開き、次にインテントが実行されます。だから、意図はそのクラスに定義されています。 **私の質問:**クラス*(クラス)の名前がclassAに等しいかどうかをチェックし、次にsthを実行するかどうかを確認する方法はありますか? – MostafaUTD

+1

@MostafaUTDこれは正しいアプローチです。あなたは間違った言葉を使っているのですか、それともこの言葉がどのように働くのか理解できません。ボタンをクリックしても "クラスを開く"ことはできません**クラス**のインスタンスでメソッドを呼び出します。 'Intent'は"実行 "しません。 'Intent'は単に"メッセージ "のようなデータコンテナです。 'startActivity()'を呼び出すと、Androidフレームワークに 'Intent'を与え、'この 'Intent'を扱うことができる' Activity'を見つけてください。 Androidは 'startActivity()'と呼ばれるコンポーネントを特定するための組み込みの方法を提供していません。 –

関連する問題