2017-04-04 7 views
-1

私はインタフェース経由で通信するネストされたフラグメントを使用しています。 ChildFragment.javaParentFragment内にネストされている場合、親フラグメントがインタフェースを実装しているかどうかを確認してください。

ChildFragment.java

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    try { 
     _mOnImageAvailableListener = (OnImageAvailableListener) context; 
    } catch (ClassCastException e) { 
     throw new ClassCastException(context.toString()+" must implement onImageAvailable"); 
    } 
} 

しかし:私は、次のフラグメントは、活動にネストされていた過去、で、私はこのような何かをしました.java、どうすれば保証できますかParentFragment.javaOnImageAvailableListenerを実装していますか?

答えて

1

getParentFragment()の方法を使用できます。このようなもの:

if (getParentFragment() instanceOf OnImageAvailableListener){ 
//do something 
} else { 
//throw an exception 
} 
+0

'getParentFragment()'を返す 'null'なのでを行うことができますChildFragmentに比べgetChildFragmentManager()ないgetFragmentManager()またはgetActivity().getSupportFragmentManager()

を使用する必要があります'に移動 – Carpetfizz

+0

'onActivityCreated()'メソッドまたは 'onViewCreated()' –

+0

まだヌルを返す – Carpetfizz

1

ChildFragment.javaはコールバックのようなアクティビティで直接使用されます。

は...どこにでもボタンのクリックのようなこのコードを入れて、あなたの活動にごChildFragment.java作成インターフェースで

 FragmentManager fm = getSupportFragmentManager(); 
    ChildFragment childFragment= new ChildFragment(); 
    childFragment.show(fm, "Select Position"); 

を考え、活動の外観を添付します。

private InterfaceName faceName; 

public interface InterfaceName { 
    void setPosition(int position); 
} 

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    Activity activity; 
    if (context instanceof Activity) { 
     activity = (Activity) context; 
     try { 
      faceName= (InterfaceName) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() 
        + " must implement Listener"); 
     } 
    } 
} 

最後に、フラグメントをコールバックします。

faceName.setPosition(position, INDEX); 

あなたのアクティビティにChildFragment.InterfaceNameを実装し、そのポジションを取得します。 ParentFragmentで

@Override 
public void setPosition(int position) { 

} 
1

あなたはこの

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    if(getParentFragment() instanceof OnImageAvailableListener) { 
     // cast and save it to instance variable.. 
    } 
} 
関連する問題