2016-07-31 4 views
1

呼び出しアクティビティのインスタンス変数を扱うことができなければならない非アクティビティクラス、および非活動クラスC.Cの方法を使用するために、私は2つのアクティビティのA及びBを有する

での作業、私は現在実行中のアクティビティからCのインスタンスcを作成します(Aはフォアグラウンド、AはCを作成したとします)。

ここで、cからアクティビティAのインスタンス変数を使いたいとします。私は何をすべきか?

私は複数のアクティビティに対して非アクティビティCクラスを使用しようとしています。私を助けてください!私はそれをたくさん研究しましたが、まだそれについて有用な何かを見つけることができませんでした。

ActivityOne.java::(

これは、例えば、コードされ

package com.example.vaibhav.a21matchsticks; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 

public class Example extends AppCompatActivity { 

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

// Now comes the method, I want to use in the non-activity java class. 

public void buttonClick(View view) { 
    EditText editText = (EditText) findViewById(R.id.editMe); //finds the view from the activity 
    int i = Integer.parseInt(editText.getText().toString()); 

    //Below code changes the view state, if the condition is true 

    if(i<4) { 
     findViewById(R.id.button).setEnabled(false); 
    } 

} 

は、一つのEditTextビュー(idの 'editMe')及びボタンを有する線状レイアウトを有するようにXMLファイルを想定します(id 'button')。このような1つ以上のアクティビティがあり、それぞれ少なくとも2つ以上のビューを持っています。異なる活動のための条件文および対応するレイアウトを変更する悲しい。

+0

これは非常に曖昧です。 Cクラスは何をすべきなのですか?あなたのアクティビティクラスのメソッドを別の場所から呼び出すだけでよい場合は、そのインスタンスを渡すことができます。しかし、アクティビティのライフサイクルは、あなたが慎重でない場合、その計画にいくつかの落とし穴を投げることができます。 – solarshado

+0

@solarshadowもちろん、この質問のCクラスは何も役に立ちません。それは私の質問の一例になるはずだった。私の元のコードでは、私は3つの活動があります。これらのアクティビティのそれぞれは、一連の命令を実行するために同じコードを使用します。だから私はいくつかの行を節約するために、それらをすべて1つの非活動クラスに入れることに決めました。しかし、私は、このクラスに入れようとしているコードは、呼び出しアクティビティのいくつかのビューを参照することに気付きました。 – vaibhavS

+0

あなたがやっていることの詳細に応じて、Cを他のアクティビティクラスのスーパークラスとして構築することができます。 setContentView()をオーバーライドすると、superの実装を呼び出した後に必要なビューを取得できます。 – solarshado

答えて

0

曖昧ですが、クラスCはヘルパークラスのようです。さて、Cクラスのインスタンス変数(と他の情報も)にアクセスしたいので、それらを手動で渡す必要があります。渡す内容に応じて、クラスCのコンストラクタまたはクラスCのインスタンスメソッドを介してクラスCに渡すことができます。あなたはこのような何かを経由して、クラスCへのあなたの活動からViewGroupの参照を渡すことができますあなたの質問の最後のステートメントに基づいて:例えばのために

同様

public void initLayout(ViewGroup parent) { 

    // Hide/unhide/perform actions/etc based on current activity needs 

} 

、あなたはまた、クラスにenum値を渡すことができますCを使用してクラスCのアクティビティを区別します。クラスCとアクティビティの通信については、Javaでinterfaceを参照してください。お役に立てれば。

+0

あなたの答えは人によってはうまくいくかもしれませんが、私にとっては3つすべてのアクティビティからそれぞれのビューを手動で渡すのは面倒です。ありがとう! – vaibhavS

+0

@vaibhavS Hmm ...おそらく、他のクラスの変数にアクセスする唯一の方法です。しかし、複数のビューについて言及しているので、ビューの配列としてインスタンスメソッドまたはクラスCのコンストラクタを使って渡すことができます。ちょうどsauing。 – Shaishav

関連する問題