6

Intentando hacer que un oyente onclick trabaje en una ejecución lineal, pero nunca se llama :(. Habilitado hacer clic y es útil (ambos modos) y todavía no puede responder el oyente de clic Detalles de la plataforma: Android 3.0 .. Cualquier ayuda ?? código de abajoEl oyente de clic de LinearLayout nunca se llama

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:id="@+id/menu_items_button" 
       android:layout_width="0dip" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:orientation="vertical" 
       android:gravity="center_horizontal" 
       android:paddingTop="@dimen/gen_margin_xsmall" 
       android:paddingBottom="@dimen/gen_margin_xsmall" 
       android:background="@drawable/rule_bg_menu_button" 
       android:clickable="true" 
       android:focusableInTouchMode="true" 
      > 
       <ImageView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/menu_items" 
        android:tag="image" 
       /> 

       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:tag="text" 
        android:text="@string/menu_items_icon_txt" 
        style="@style/textDisplay.mediumLarge" 
       /> 

      </LinearLayout> 

y en el código para agregar el detector de eventos

_itemsButton = (LinearLayout) menu.findViewById(R.id.menu_items_button); 
final Intent itemsIntent = new Intent(this, ItemsActivity.class); 
_itemsButton.setOnClickListener(
      new View.OnClickListener() {  
       @Override 
       public void onClick(View v) { 
        startActivity(itemsIntent); //Never called! 
       } 
      } 
     ); 

la razón por la que estoy haciendo esto y no utilizar un botón de imagen en su lugar se debe a que el fondo de el "botón" está basado en el estado (cambios de gradiente) pero también la imagen y para combinar con los dos al hacer clic/en el foco, utilicé una distribución lineal que tiene un ImageView en sí mismo. ¿Alguna sugerencia sobre por qué el clickListener no está funcionando en el linearLayout?

THX

+0

¿Ve el cambio de estado cuando hace clic en el diseño? – bigstones

+0

sí el estado cambió, el color de fondo cambió, que se define en el estado dibujable – Rickster

+0

@pzulw lo hizo bien, la vista de la imagen (dentro de la distribución lineal) está recibiendo el clic ... tal vez debería hacer que "no se pueda hacer clic" o propagar el clic a su padre de alguna manera ... – Rickster

Respuesta

5

¿El Haga clic en Ir a la ImageView en lugar del LinearLayout? Intente hacer clic en el área del panel (si corresponde) o intente colocar clickner en el ImageView1.

+1

ENFERMEDAD !! u rock ... sí lo hizo, ¿cómo puedo subirlo a su superior (el linearlayout?) – Rickster

+1

La manera fácil es establecer el mismo oyente de clic en la vista de la imagen y la vista de texto. View.OnClickListener activityLauncher = new View.OnClickListener() {...} layout.setOnClickListener (activityLauncher); imageView.setOnClickListener (activityLauncher); textView.imageView.setOnClickListener (activityLauncher); – pzulw

+4

Sé que esto es tarde, pero también puede configurar ImageView como no hacer clic en el XML: 'android: clickable =" false "' – Sector95

-3

El ancho de su LinearLayout se establece en "0dip", no debería ver nada en la pantalla.

Si el ancho se cambia a "FULL_PARENT", eso funciona. Por favor revisa tu código cuidadosamente otra vez.

+3

Veo el botón bien. El ancho es 0 inmersión porque hay un peso asociado con él que maneja el ancho. – Rickster

+0

Luego intente hacer que LinearLayout llene toda la pantalla, encontrará que el diseño recibe el evento click. He intentado tu código, funciona :) – shihpeng

+1

Dos notas: 0dp (o 0dip) es el layout_width apropiado cuando se utiliza con layout_weight.En segundo lugar, sería "fill_parent", no "full_parent", y en versiones más nuevas de Android puede usar "match_parent" en su lugar – LocalPCGuy

3

(añadiendo mi respuesta como una nueva respuesta para que pueda utilizar la etiqueta PRE.)

La manera más fácil es establecer el mismo detector de clics en la vista de la imagen y la vista de texto.

View.OnClickListener activityLauncher = new View.OnClickListener() {... } 
layout.setOnClickListener(activityLauncher); 
imageView.setOnClickListener(activityLauncher); 
textView.imageView.setOnClickListener(activityLauncher); 
Cuestiones relacionadas