6 Stimmen

Der Klick-Listener von LinearLayout wird nie aufgerufen

Versuchen Sie, einen Onclick-Listener arbeiten auf einem linearen Layout zu erhalten, aber seine nie aufgerufen :(. Habe clickable und focsuable (beide Modi) aktiviert und kann den Click-Listener immer noch nicht zum Reagieren bringen. Plattform-Details: Android 3.0. Jede Hilfe? Code unten

           <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>

und im Code zum Hinzufügen des Ereignis-Listeners

_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!
                }
            }
        );

Der Grund, warum ich dies tue und nicht mit einem Bild-Button stattdessen ist, weil der Hintergrund der "Schaltfläche" Zustand basiert (Farbverlauf ändert), sondern auch das Bild und um die beiden auf Klick / auf Fokus zu kombinieren, ich verwendet eine linearlayout, die ein ImageView in sich hat irgendwelche Vorschläge, warum der clickListener nicht auf die linearLayout funktioniert?

thx

0 Stimmen

Sehen Sie, wie sich der Status ändert, wenn Sie auf das Layout klicken?

0 Stimmen

Ja, der Zustand hat sich geändert, die Hintergrundfarbe hat sich geändert, die in der Zustandsdarstellung definiert ist

0 Stimmen

@pzulw bekam es richtig, die imageview (innerhalb der linearlayout) ist immer der Klick.. vielleicht sollte ich es "unklickbar" oder propagieren den Klick auf seine Eltern irgendwie.

5voto

pzulw Punkte 1582

Wurde der Klick auf die ImageView statt auf das LinearLayout ausgeführt? Versuchen Sie, in den Pad-Bereich zu klicken (falls vorhanden), oder versuchen Sie, den Click-Listener auf die ImageView1 zu setzen.

1 Stimmen

SICK!! u Rock.. ja es tat, wie kann ich es oben zu seinem Elternteil (die linearlayout?) Blase?

1 Stimmen

Der einfachste Weg ist, denselben Click-Listener für die Bild- und die Textansicht festzulegen. View.OnClickListener activityLauncher = new View.OnClickListener() {... } layout.setOnClickListener(activityLauncher); imageView.setOnClickListener(activityLauncher); textView.imageView.setOnClickListener(activityLauncher);

4 Stimmen

Ich weiß, dies ist spät, aber Sie können auch die ImageView als nicht klickbar in der XML: android:clickable="false"

3voto

pzulw Punkte 1582

(ich füge meine Antwort als neue Antwort hinzu, damit ich den PRE-Tag verwenden kann).

Der einfachste Weg ist, denselben Click-Listener für die Bild- und die Textansicht festzulegen.

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

-3voto

shihpeng Punkte 5163

Die Breite Ihrer LinearLayout wird eingestellt auf "0dip" sollten Sie auf dem Bildschirm nichts sehen.

Wenn die Breite geändert wird auf "FULL_PARENT" , das funktioniert. Bitte überprüfen Sie Ihren Code noch einmal sorgfältig.

3 Stimmen

Ich sehe die Schaltfläche gut. Die Breite ist 0 Dip, weil es ein Gewicht mit ihm verbunden ist, die die Breite behandelt.

0 Stimmen

Versuchen Sie dann, das LinearLayout so zu gestalten, dass es den gesamten Bildschirm ausfüllt, und Sie werden feststellen, dass das Layout tatsächlich das Klick-Ereignis empfängt. Ich habe versucht, Ihren Code, es funktioniert:)

1 Stimmen

Zwei Anmerkungen: 0dp (oder 0dip) ist die geeignete layout_width, wenn sie mit layout_weight verwendet wird. Zweitens, es wäre "fill_parent", nicht "full_parent", und in neueren Android-Versionen können Sie stattdessen "match_parent" verwenden

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X