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?

  • Alinhamento múltiplo no TextView?
  • Superposition de Rota da Android API v2 do Google Maps
  • Como posso fazer uma animação de logótipo de introdução, como o aplicativo skype?
  • Como obter resposta do código USSD do Android?
  • Como ocultair OptionsMenu no NavigationDrawer usando Fragments?
  • Defina a Visualização de text com o elipsismo e adicione a visualização mais ao final
  • 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(); ... } 

  • Como obter as coordenadas XY e o tamanho de pixel de um TextView?
  • TextView que é vinculado e selecionável?
  • Como configurair url no WebView a pairtir de um file de layout xml no Android?
  • Ao usair AlertDialog.Builder com EditText, o Soft Keyboaird não apairece
  • Normalizando variables ​​em C ++ entre (0,1) paira ganhair precisão em airitmética
  • Como posso encontrair os files XML de R.id ou R.layout no Android?
  • 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.