2016-11-20 11 views
0

私は、アプリ内のさまざまなアクティビティで使用できる一連のメソッドを作成しようとしています。だから私は、以下のようにクラスUtil.javaにこれらのメソッドを置くことにしました:アンドロイドのアクティビティを入力してください

class Util{ 

    MainActivity activity; 

    //constructor 
    public Util(MainActivity activity){ 
     this.activity=activity; 
    } 

    //other methods are here 
} 

MainActivityからUtilのインスタンスを作成しながら、今、上記のコードは正常に動作します。 Utilのインスタンスを別のアクティビティから作成する場合は、NewActivityと入力します。これは、引数としてNewActivityを受け付ける新しいコンストラクタを追加する必要があります。

質問: 以下のように、Utilクラス内に複数のコンストラクタを避ける方法はありますか?

class Util{ 

    Activity activity; //can hold instance of any activity 

    //constructor 
    public Util(activity activity){ 
     this.activity=activity; 
    } 

    //other methods are here 
} 

上記のコードは、現在のアクティビティのActionBarに以下のようにアクセスしたい場合には役に立ちません。私は何をしようとしている要するに

activity.getSupportActionBar() //would throw an error 

あらゆる活動(MainActivityまたはNewActivity)を保持し、私に現在割り当てられている活動のメンバーへのフルアクセスを与えることができ、単一の変数activityを作成することです。

+0

複数のコンストラクタは問題ではありません。それは複数のインスタンスです。このクラスをどのように使用するのかを[mcve]に示してください。これは、貧弱なデザインのようです。 –

+1

アクティビティを拡張する抽象クラスを作成し、他のすべてのアクティビティクラスを拡張する必要があるようです。 –

+0

良いアイデアですか?アンドロイドでのアクティビティの抽象クラスを作成するには?それがGoogleだったら、米国のためにそれをしただろう。 –

答えて

0

あなたが使用することができジェネリック

public class Util<E extends Activity> { 
     E activity; 
     public void doSomething(E activity) { 

     } 
    } 

アクセスこのような

Util<MainActivity> util = new Util<>(); 
util.doSomething(MainActivity.this); 
+0

これを試しましたが、以下のメソッドにアクセスできませんでした。method.activity.getSupportFragmentManager(); –

+0

実際のアクティビティのすべてのメンバーにアクセスしたいと思います –

+0

@SanuSomanインターフェースを作成する 'getSupportActionBar'メソッドを持つgetSupportActionBarメソッドを作成し、このインターフェースを実装し、' Eget'を 'IgetSupportActionBar'に設定しますextends IgetSupportActionBar> ' – tchelidze

関連する問題