Android onClickListener不会为子视图触发

时间:2013-04-23 16:07:47

标签: android onclick relativelayout onclicklistener

我正在开发一个使用onClickListeners来翻转磁贴的应用。我在RelativeLayout中拥有整个东西。然后我有第二个RelativeLayout来包含我的所有瓷砖,以便于清理和添加。我还在xml中预定了各种其他按钮。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/boardlayout"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/board"
    tools:context=".MainActivity" >

    <RelativeLayout
        android:id="@+id/mainlayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </RelativeLayout>

    <ImageView
        android:id="@+id/menuButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/skill2Button"
        android:layout_alignParentRight="true"
        android:src="@drawable/ic_menu" />

</RelativeLayout>

在代码中,我添加了Tiles,它是我自定义动作的ImageView。我还向他们添加了onClickListeners。 grid变量是我上面显示的mainlayout RelativeLayout。

private void createTiles(){
    //Create the tiles
    int j = 0;
    Tile t;
    for(int i = 0; i < 30; i++){

        int r = i/5;
        int c = j%5;
        t = new Tile(this, r, c);
        t.setOnClickListener(tileClicked);

        j++;
        if(j == 5)
            j=0;            

        grid.addView(t);
    }
}

问题在于较旧的Android版本,这些磁贴似乎永远不会触发click事件。我将onClickListeners添加到tile中,然后在RelativeLayout上添加一个来测试,RelativeLayout获取事件,但是tile没有。

菜单ImageView(在上面的xml中显示)也有一个onClickListener,它会被触发。

在较新的Android版本中,这样可以正常使用。这让我想知道旧版本是否存在从代码中添加的视图传递事件的问题。

有人可以告诉我,对于旧版本我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

试试这个,

private void createTiles(){
    //Create the tiles
    int j = 0;
    Tile t[30];

    for(int i = 0; i < 30; i++){

        int r = i/5;
        int c = j%5;
        t = new Tile(this, r, c);
        t[i].setOnClickListener(this);

        j++;
        if(j == 5)
            j=0;            

        grid.addView(t);
    }
}

您需要在类中实现OnClickListener。 然后你必须覆盖onClick方法:

 @Override
    public void onClick(View v) {
        switch(v.getId()){

          case // switch the ids of your views by calling getId method on them           
        }
    }