3

私は断片を扱っています。
私はActivityとは異なりfragmentsます。
それぞれにデータベースへのアクセスを許可するへfragmentのアクセスが必要ですが、フラグメントがたくさんあるので、多くのフラグメントが必要になると思うので、フラグメントごとにClass(call it X)異なるインスタンスを作成したくありません。 では、どうすればよいですか? 私はこのようなものを(ゲッターで)書いたが、うまくいかない! Class Xmemory

public class MyActivity {
  private ClassX classx;

  .....

  public ClassX getClassX() {
     return classx;
  }   
  .....
}

しかし、それよりも、どうすればそれをfragment

4

5 に答える 5

12

フラグメントからアクティビティのメソッドを呼び出します

((MyActivity )  getActivity()).getClassX() ;
于 2012-08-22T09:45:40.243 に答える
4

追加のキャストを行う必要があります:

Activity activity123 = getActivity();

if(activity123 instanceof ParentActivity) {
    ((ParentActivity) activity123).someMethodInParentActivity();
}
于 2013-05-21T10:36:49.167 に答える
3

これは、Javaの質問とAndroidのもう少しです。

データベースへのアクセスを検討している場合は、データベースシングルトンの作成を検討してください。

だから次のようなもの:

public class Database {

    // This starts off null
    private static Database mInstance;

    /**
     * Singleton method, will return the same object each time.
     */
    public static final Database getInstance() {
        // First time this method is called by Database.getInstance() from anywhere
        // in your App. It will create this Object once.
        if(mInstance == null) mInstance = new Database();
        // Returns the created object from a statically assigned field so its never
        // destroyed until you do it manually.
        return mInstance;
    }

    //Private constructor to stop you from creating this object by accident
    private Database(){
      //Init db object
    }

}

したがって、フラグメントとアクティビティから、クラスに次のフィールドを配置できます(基本アクティビティとフラグメントを使用して、繰り返しコードを保存することをお勧めします)。

public abstract class BaseFragment extends Fragment {

    protected final Database mDatabase = Database.getInstance();

}

それからあなたの具体的な断片はあなたのBaseFragment例えばを拡張することができますSearchListFragment extends BaseFragment

お役に立てれば。

シングルトンデータベースについて読む価値がある

よろしく、クリス

于 2012-08-22T09:44:15.173 に答える
2

Callbacksと呼ばれるインターフェース(または必要に応じて他の何か)を定義します。その中に、と呼ばれるパブリックメソッドがありgetClassX()ます。次に、アクティビティにCallbacksインターフェースを実装させます。

フラグメントonAttachのに、オブジェクトへの参照を保存しCallbacksます(つまり、次のようなアクティビティを介してアクティビティを保存します。

if(activity instanceof Callbacks)
    mCallbacks = (Callbacks)activity;

これにより、フラグメントが関数を呼び出すことができるようになります。(後で別のアプリでフラグメントを再利用したい場合)

次に、アクティビティで、onCreate()のインスタンスを作成しますClassX。メソッドで、そのgetClassX()メソッドへの参照を返すだけです。

フラグメントからの参照が必要な場合は、を呼び出しmCallbacks.getClassX()てソートする必要があります。

于 2012-08-22T09:43:04.000 に答える
0

アクティビティで静的オブジェクトを使用してフラグメントから使用するか、フラグメントでgetActivity()メソッドを呼び出して、アクティビティオブジェクト/メソッド全体にアクセスできます。

于 2012-08-22T09:36:39.427 に答える