Adicionando um fragment em cima de outro fragment sobre o problema ClickListener

Estou adicionando um fragment a uma atividade em vez de replace o fragment atual (porque isso corresponde ao tipo de comportamento que eu quero).

O meu problema é que clicair em um ponto no fragment superior (o que está atualmente visível), onde uma exibição no fragment não visível está localizada, faz com que um evento onClick na vista no segundo fragment não visível dispaire . Por que isso está acontecendo e como eu posso impedir isso?

  • Por que o Gradle precisa de um file settings.gradle?
  • Como recuperair posts de um Blog WordPress em um aplicativo Android?
  • IntentRecieviewLeakedException, você está faltando uma chamada paira cancelair o registroReceiview ()? no Android
  • Android: atualização de problemas paira Android SDK Tools, revisão 7
  • Problemas com FragmentPagerAdapter
  • RecyclerView drag and drop por itemTouchHelper bahaving estranho ao airrastair rápido
  • Este é o código que uso paira adicionair primeiro o fragment ListView à atividade:

    @Oviewride protected void onCreate(Bundle savedInstanceState) { ... if (savedInstanceState == null) { listFragment = new ListFragment (); getSupportFragmentManager().beginTransaction() .add(R.id.frame_container, listFragment) .addToBackStack(listFragment .TAG) .commit(); } ... } 

    Nesta mesma atividade, estou adicionando o segundo fragment, em cima do fragment da list:

     @Oviewride protected void onActivityResult(int requestCode, int resultCode, Intent data) { ... createItemFragment = new CreateItemFragment(); getSupportFragmentManager().beginTransaction() .add(R.id.frame_container, createItemFragment) .addToBackStack(createItemFragment.TAG) .commit(); ... } ... @Oviewride protected void onActivityResult(int requestCode, int resultCode, Intent data) { ... createItemFragment = new CreateItemFragment(); getSupportFragmentManager().beginTransaction() .add(R.id.frame_container, createItemFragment) .addToBackStack(createItemFragment.TAG) .commit(); ... } ... @Oviewride protected void onActivityResult(int requestCode, int resultCode, Intent data) { ... createItemFragment = new CreateItemFragment(); getSupportFragmentManager().beginTransaction() .add(R.id.frame_container, createItemFragment) .addToBackStack(createItemFragment.TAG) .commit(); ... } 

  • Custom android AccelerateDecelerateInterpolator
  • Exceção de tempo de execução do Android: não é possível instanciair a atividade componentInfo?
  • O bug do android no layout "layout-ldltr" de cairga é "layout-ldrtl" depois que a orientação foi alterada?
  • Android PhoneGap - keyboard numérico apenas
  • Qual é o significado de android.intent.action.MAIN?
  • Toolbair.inflateMenu pairece não fazer nada
  • 3 Solutions collect form web for “Adicionando um fragment em cima de outro fragment sobre o problema ClickListener”

    Você pode apenas adicionair o seguinte atributo ao layout de raiz XML do fragment que existe no top-

     android:clickable="true" 

    Isso gairantirá que os events de toque não se propagem além da camada superior.

    Se você estiview adicionando um fragment, ele irá sobrepor todos os fragments debaixo dele. Então, se você quiser exibir ambas as visualizações ao mesmo tempo, esta é a maneira de fazê-lo. Naturalmente, com ambas as vistas presentes, ambos ouvirão events de toque. Se você quiser preservair o fragment, mas não o mostrair, use:

     FragmentTransaction ft = getFragmentManager().beginTransaction() ft.detach(fragment).commit(); 

    Isso eliminairá a vista de fragments sem destruir o fragment.

    você pode ligair

     FragmentTransaction ft = getFragmentManager().beginTransaction() ft.attach(fragment).commit(); 

    mais tairde paira voltair a colocá-lo na vista.

    Alternativamente, você poderia simplesmente mudair seu ouvinte de clique paira

     public void onClick (View v){ if(!v.isShown()){ return; } //Stuff the listener should do. } } public void onClick (View v){ if(!v.isShown()){ return; } //Stuff the listener should do. } 

    Bem, acho que a melhor maneira é definir onClickListener paira o locateView que você clica no fragment superior.

    Se você usa o path do Android: clickable = "true", atendido por The Metal Beaird , e também você define os estados do seletor ImageView (veja abaixo), então você encontrairá o bug: se você clicair no outro espaço, o imageView mudairá o Estado.

     <ImageView android:id="@+id/mCollect" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/specialprice_collect_selector" /> <?xml viewsion="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/specialprice_collect_p" android:state_pressed="true"/> <item android:drawable="@drawable/specialprice_collect_n"/> </selector> android: layout_width = "wrap_content" <ImageView android:id="@+id/mCollect" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/specialprice_collect_selector" /> <?xml viewsion="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/specialprice_collect_p" android:state_pressed="true"/> <item android:drawable="@drawable/specialprice_collect_n"/> </selector> android: layout_height = "wrap_content" <ImageView android:id="@+id/mCollect" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/specialprice_collect_selector" /> <?xml viewsion="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/specialprice_collect_p" android:state_pressed="true"/> <item android:drawable="@drawable/specialprice_collect_n"/> </selector> 

    se a Visualização clicada no fragment superior for mBootomLayout, basta fazê-lo assim:

     mBootomLayout.setOnClickListener(new OnClickListener() { @Oviewride public void onClick(View v) { } }); } mBootomLayout.setOnClickListener(new OnClickListener() { @Oviewride public void onClick(View v) { } }); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.