web-dev-qa-db-ja.com

メインアクティビティからフラグメントメソッドを呼び出す方法

フラグメントクラスにメソッドがあります。メインアクティビティからそのメソッドを呼び出したいが、FragmentById(または)FragmentByTagを使用したくない。

私のフラグメントメソッド:

public void setItemFromDrawer(String sourceTag, String destTag) {
    //dosomething
}

FragmentById(または)FragmentByTagを使用せずにメインアクティビティから上記のメソッドを呼び出す方法は?

12
hikoo

最初にインターフェースを作成します

public interface MyInterface
{
    void myAction() ;
}

フラグメントはこのインターフェースを実装する必要があります。

public MyFragment extends Fragment implements MyInterface

アクティビティで、MyInterfaceタイプのフィールドを定義

  private MyInterface listener ;

  public void setListener(MyInterface listener)
  {
     this.listener = listener ;
  }

フラグメントを作成して追加する場合:

setListener(myFragment);

最後に、Fragmentメソッドを呼び出したいという条件が発生したら、次を呼び出します。

listener.myAction() ; // this will call the implementation in your MyFragment class.
28
Farhad Faghihi

フラグメントメソッドを呼び出すことを意味します

((YourFragmentClass) fragment).Yourmethod();
5
user5466222

ser5466222で答えをよりよく説明するには:

YourFragmentClass fragment = new YourFragmentClass();
((YourFragmentClass) fragment).yourmethod();
4
Sif

アクティビティでは、フラグメントをロードする次のようなものを使用します。

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(container, fragment);

transaction.addToBackStack(null); // if you want to store transaction        
transaction.commit();
currentFragment = fragment; // currentFragment is global Fragment variable

フラグメントのメソッドを呼び出す場所で次の行を使用します

currentFragment.setItemFromDrawer("sourceTag","destTag");
2
Khizar Hayat