Frage Wie lassen sich Klickereignisse an einen Container in Android weitergeben?


Ich habe einen Tisch von FrameLayout wo jeder Rahmen entweder ein enthält ImageView oder ein TextView. Unabhängig vom Inhalt im Rahmen möchte ich das onClick Ereignis, das von der OnClickListener Stellen Sie den Rahmen ein.

Wie kann ich das erreichen?

Dies ist etwas von meinem Layout, ich habe insgesamt 5 Zeilen (Hier wird nur 1 gezeigt). Wie oben beschrieben, habe ich in jeder Zeile 5 FrameLayouts, die jeweils eine TextView enthalten. Ich kann meinen OnClickListener nicht in der TextView platzieren, da dies zur Laufzeit in ImageView geändert werden kann. Deshalb möchte ich den OnClickListener auf dem FrameLayout.

Es scheint, dass der Inhalt von FrameLayout verhindert, dass das Click-Ereignis erkannt wird.

    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/gateContainer"
        android:stretchColumns="*">

        <TableRow
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_gravity="center">

            <FrameLayout
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:id="@+id/door1"
                android:clickable="true">

                <TextView
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:text="New Text"
                    android:id="@+id/textView"
                    android:layout_gravity="center" />

            </FrameLayout>

            <FrameLayout
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:id="@+id/door2" >

                <TextView
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:text="New Text"
                    android:id="@+id/textView5"
                    android:layout_gravity="center" />
            </FrameLayout>

            <FrameLayout
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:id="@+id/door3" >

                <TextView
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:text="New Text"
                    android:id="@+id/textView4"
                    android:layout_gravity="center"/>
            </FrameLayout>
     </TableLayout>

Hier ist ein Beispiel, wie ich die OnClickListeners einstellen kann:

        View.OnClickListener clickListener = new View.OnClickListener() {
            @Override
            public void onClick(View v){
                // do something
            }
        };

        TableLayout tableLayout = (TableLayout) findViewById(R.id.gateContainer);
        // Go through all TableRows
        for (int i = 0; i < tableLayout.getChildCount(); i++){
            TableRow tableRow = (TableRow) tableLayout.getChildAt(i);
            // Set listener for each FrameView
            for (int j = 0; j < tableRow.getChildCount(); j++){
                FrameLayout frame = (FrameLayout) tableRow.getChildAt(j);

                frame.setOnClickListener(clickListener);
            }
        }

6
2017-11-28 06:50


Ursprung


Antworten:


Implementieren Sie OnTouchListener einfach über ImageView- und TextView-Komponenten und entschlüsseln Sie sie im Sinne von ihnen.

<your_view>.setOnTouchListener(new OnTouchListener(){

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // TODO Auto-generated method stub
        return true;
    }

}); 

Dadurch wird sichergestellt, dass Ihr Container das erledigt.


7
2017-11-28 06:55



Sie könnten auch android: clickable = "false" auf die TextView / ImageView Layouts und android: clickable = "true" auf den Hintergrund setzen, so dass die Hintergrundansicht immer die Klicks erfasst.

Darüber hinaus kann die folgende Antwort hilfreich für Personen sein, die dieses Problem in Betracht ziehen:

SO: Android: Wie man ein Click-Ereignis auf LinearLayout-Childs überträgt und deren Zeichen ändert


6
2018-03-27 10:33



Sie können das Klickereignis auf Ihrer Website definieren TextView oder ImageView wie nachstehend:

   <yourView>.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // your logic here.

        }
    });

0
2017-11-28 06:54