2016-03-31 17 views
0

FrameLayoutがフラグメントコンテナとして使用されるアクティビティがあります。このFrameLayoutをこのFrameLayoutに追加するたびにこのFrameLayoutをクリック可能にしたいと思います(すべてのクリックイベントがフラグメントを通過するのを避けるため)。onAttachFragmentがアクティビティによって呼び出されない

私はonAttachFragmentを使用して、フラグメントがアクティビティに追加されたことを検出できることを読んだことがあります。

@Override 
public void onAttachFragment(Fragment fragment) { 
    fragment.getView().setClickable(true); 
    super.onAttachFragment(fragment); 
} 

をしかし、何らかの理由でこのメソッドが呼び出されることはありません:

は、だから私は、私の活動でこのコードを追加しました。

何か不足していますか? onAttachFragment()が呼び出されたときに

おかげ

+0

最初にデフォルトの実装を呼び出すことをお勧めします。そのため、ハンドラの最初の呼び出しとしてスーパーコールを再配置してみてください。それとは別に、これは[x-y問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)のように思えます。 'フラグメントを通過するすべてのクリックイベントを回避する 'とはどういう意味ですか? –

+0

この@Overrideを試してください public void onAttachFragment(android.app.Fragment fragment){ super.onAttachFragment(fragment); Log.d( "onAttachFragment"、 "onAttachFragment android.app.Fragment"); } – Jickson

答えて

1

Fragmentの見解は文句を言わないで膨張されています。 docsから引用する:フラグメントが はすぐその Fragment.onAttach()メソッドの呼び出し後とFragment.onCreate()前に、この活動に添付されているときに呼び出され

void onAttachFragment(Fragment fragment)

。このように

ビューが(ちょうどonCreate()した後に発生)onCreateView()まで膨張されていないとして、fragment.getView()を呼び出すと、意味がありません。

はaltnerative方法として、あなたはどちらかだけで設定することができFragmentのようにクリック可能かどうか、その引数の一部として、レイアウト:

public class MyFragment extends Fragment { 

    public static MyFragment getInstance(boolean isClickable) { 

     MyFragment frag = new MyFragment(); 
     Bundle args = new Bundle(); 

     args.putBoolean("key", isClickable); 
     frag.setArguments(args); 

     return frag; 

    } 

    //... 
    private boolean isClickable() { 
     return getArguments().getBoolean("key"); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

     View view = //Inflate view... 

     view.setClickable(isClickable()); 
     return view; 

    } 

をそれとも、あなたはこの別の方法にアプローチしているinterfaceを使用することができますあなたのFragmentの内部onCreateView()と呼ばれ、Activityに「尋ねる」とは、そのルートビューをクリック可能にするかどうかを指定します。

関連する問題