Возникли проблемы с setOnClickListener () - PullRequest
0 голосов
/ 10 сентября 2011

У меня есть следующий макет xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:background="#ffffff" android:layout_height="fill_parent">
    <LinearLayout android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:orientation="vertical"
        android:layout_gravity="center">
        <TextView android:text="Title1" android:id="@+id/title1"
            android:padding="5dip" android:background="#005555"
            android:layout_width="fill_parent" android:layout_height="wrap_content" />
        <LinearLayout android:id="@+id/panel1"
            android:visibility="gone" android:orientation="vertical"
            android:layout_width="fill_parent" android:layout_height="wrap_content">
            <TextView android:layout_margin="2dip" android:text="Item1"
                android:padding="5dip" android:background="#777777"
                android:layout_width="fill_parent" android:layout_height="wrap_content" />
            <TextView android:layout_margin="2dip" android:text="Item2"
                android:padding="5dip" android:background="#777777"
                android:layout_width="fill_parent" android:layout_height="wrap_content" />
            <TextView android:layout_margin="2dip" android:text="Item3"
                android:padding="5dip" android:background="#777777"
                android:layout_width="fill_parent" android:layout_height="wrap_content" />
        </LinearLayout>
    </LinearLayout>
    <LinearLayout android:layout_marginTop="2dip"
        android:layout_width="fill_parent" android:layout_height="wrap_content"
        android:orientation="vertical" android:layout_gravity="center">
        <TextView android:text="Title2" android:id="@+id/title2"
            android:padding="5dip" android:background="#005555"
            android:layout_width="fill_parent" android:layout_height="wrap_content" />
        <LinearLayout android:id="@+id/panel2"
            android:visibility="gone" android:orientation="vertical"
            android:layout_width="fill_parent" android:layout_height="wrap_content">
            <TextView android:layout_margin="2dip" android:text="Item1"
                android:padding="5dip" android:background="#777777"
                android:layout_width="fill_parent" android:layout_height="wrap_content" />
            <TextView android:layout_margin="2dip" android:text="Item2"
                android:padding="5dip" android:background="#777777"
                android:layout_width="fill_parent" android:layout_height="wrap_content" />
            <TextView android:layout_margin="2dip" android:text="Item3"
                android:padding="5dip" android:background="#777777"
                android:layout_width="fill_parent" android:layout_height="wrap_content" />
        </LinearLayout>
    </LinearLayout>
    <LinearLayout android:layout_marginTop="2dip"
        android:layout_width="fill_parent" android:layout_height="wrap_content"
        android:orientation="vertical" android:layout_gravity="center">
        <TextView android:text="Title3" android:id="@+id/title3"
            android:padding="5dip" android:background="#005555"
            android:layout_width="fill_parent" android:layout_height="wrap_content" />
        <LinearLayout android:id="@+id/panel3"
            android:visibility="gone" android:orientation="vertical"
            android:layout_width="fill_parent" android:layout_height="wrap_content">
            <TextView android:layout_margin="2dip" android:text="Item1"
                android:padding="5dip" android:background="#777777"
                android:layout_width="fill_parent" android:layout_height="wrap_content" />
            <TextView android:layout_margin="2dip" android:text="Item2"
                android:padding="5dip" android:background="#777777"
                android:layout_width="fill_parent" android:layout_height="wrap_content" />
            <TextView android:layout_margin="2dip" android:text="Item3"
                android:padding="5dip" android:background="#777777"
                android:layout_width="fill_parent" android:layout_height="wrap_content" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

И я хотел бы установить прослушиватель щелчков для TextViews "title1", "title2" и "title3", выполняя цикл и находя соответствующийView children:

import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MyActivity extends Activity implements View.OnClickListener {
    private static final String TAG = "MyActivity";

    @Override
    public void onCreate( Bundle savedInstanceState ) {
        super.onCreate( savedInstanceState );
        setContentView( R.layout.main );

        mPanelWrappers = new ArrayList<LinearLayout>();
        LayoutInflater inflater = (LayoutInflater)getSystemService( Context.LAYOUT_INFLATER_SERVICE );
        ViewGroup rootLayout = (ViewGroup)inflater.inflate( R.layout.main, null );
        for( int i = 0; i < rootLayout.getChildCount(); i++ ) {
            View rootChild = rootLayout.getChildAt( i );
            if( rootChild instanceof LinearLayout ) {
                LinearLayout panelWrapper = (LinearLayout)rootChild;
                mPanelWrappers.add( panelWrapper );
                for( int j = 0; j < panelWrapper.getChildCount(); j++ ) {
                    View wrapperChild = panelWrapper.getChildAt( j );
                    if( wrapperChild instanceof TextView ) {
                        Log.d( TAG, "Setting on-click listener for " + wrapperChild.getId() );
                        if( wrapperChild == findViewById( R.id.title1 ) ) {
                            Log.d( TAG, "Found title1" );
                        } else {
                            Log.d( TAG, "Not title1" );
                        }
                        wrapperChild.setOnClickListener( this );
                    }
                    break;
                }
            }
        }
    }

    @Override
    public void onClick( View panelTitle ) {
        Log.d( TAG, "On click" );
    }

    private ArrayList<LinearLayout> mPanelWrappers;
}

По какой-то причине onClick не запускается, и я понял, что wrapperChild никогда не равен findViewById (R.id.title1).Есть идеи?

1 Ответ

0 голосов
/ 10 сентября 2011

Я могу вспомнить два случая:

  • Сначала вы динамически создаете макет.В этом случае, когда вы создаете TextView, вы можете установить нужный вам OnClickListener, и вы готовы.

  • Во-вторых, у вас есть определенный макет, где вы можете иметь определенные идентификаторы и получить доступдля Views с помощью findViewById или даже для установки определенных слушателей прямо в xml через android: onclick.

В любом случае вместо этого wrapperChild.setOnClickListener( this ); попробуйте следующее: wrapperChild.setOnClickListener(new OnClickListerer(){ // Code here});.Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...