2016-03-31 6 views
0

Ich habe eine Aktivität, in der ein FrameLayout als Fragment Container verwendet wird. Ich möchte dieses FrameLayout immer anklickbar machen, wenn ein Fragment in diesem FrameLayout hinzugefügt wird (um zu vermeiden, dass jedes Klickereignis das Fragment durchläuft).onAttachFragment nicht von Aktivität

Ich habe gelesen, dass ich onAttachFragment verwenden kann, um zu erkennen, wenn ein Fragment der Aktivität hinzugefügt wird.

So habe ich diesen Code in meiner Tätigkeit hinzugefügt:

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

Aber aus irgendeinem Grund wird diese Methode nie aufgerufen.

Fehle ich etwas?

Dank

+0

Es empfiehlt sich, zuerst den Aufruf der Standardimplementierung zu verwenden. Versuchen Sie daher, den Superaufruf als ersten Aufruf im Handler neu anzuordnen. Abgesehen davon scheint dies ein [x-y-Problem] zu sein (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Was meinst du mit "vermeiden Sie jedes Klick-Ereignis, um durch das Fragment zu gehen"? –

+0

Probieren Sie diese @Override öffentlichen void onAttachFragment (android.app.Fragment Fragment) { super.onAttachFragment (Fragment); Log.d ("onAttachFragment", "onAttachFragment android.app.Fragment"); } – Jickson

Antwort

1

Die Fragment ‚s Ansicht wird nicht aufgeblasen wurden, wenn onAttachFragment() genannt wird. Ein Zitat aus dem docs:

void onAttachFragment(Fragment fragment)

aufgerufen, wenn ein Fragment ist zu dieser Aktivität gebunden zu sein, sofort nach der Anruf an seine Fragment.onAttach() Methode und vorFragment.onCreate().

Als solche fragment.getView() Aufruf macht keinen Sinn, da die Sicht erst onCreateView() (die auftritt, kurz nach onCreate()) aufgeblasen wird.

Als altnerative Methode, könnten Sie entweder eingestellt gerade die Fragment des Layout als anklickbare oder nicht als Teil seiner Argumente:

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; 

    } 

Oder Sie können diese ein andere Art und Weise nähern und ein interface verwenden, das ist rief in onCreateView() von Ihrem Fragment, wo Sie die Activity "fragen", es ist an, ob seine Root-Ansicht anklickbar sein sollte oder nicht.

Verwandte Themen