将自定义属性绑定到android内部视图

时间:2013-11-04 08:57:43

标签: android

我的活动中有超过20多个TextViewImageView,如下所示:

<GridLayout id="layout">
    <TextView android:id="@+id/t1" android:layout_width="wrap_content" .../>
    <TextView android:id="@+id/t2" android:layout_width="wrap_content" .../>
    ......
</GridLayout>

每个TextViewImageView都有相关的代码。

现在我尝试处理子视图的click事件,逻辑很简单,用不同的代码从服务器获取数据。

我知道一般方法可能是这样的:

findViewById("layout").setOnClickListener(this);

@Override
public void click(View v){
    switch(v.getId()){
        case R.id.t1 :
            doSearch(1);
        break;
        case R.id.t2 :
            doSearch(2);
        break;
        .....
    }
}

然后我需要太多case s。

然后我想知道我是否可以直接将代码绑定到View,也许是这样:

<TextView android:id="@+id/t1" android:layout_width="wrap_content" xx:code="1" .../>
<TextView android:id="@+id/t2" android:layout_width="wrap_content" xx:code="2" .../>

然后我可以这样处理事件:

@Override
public void click(View v){
    doSearch(v.getCode());
}

这可能还是其他替代方案?

1 个答案:

答案 0 :(得分:0)

您可以使用tag执行此操作。在你的xml中:

<GridLayout id="layout">
    <TextView android:id="@+id/t1" android:layout_width="wrap_content" android:tag="1" .../>
    <TextView android:id="@+id/t2" android:layout_width="wrap_content" android:tag="2" .../>
    ......
</GridLayout>

并在您的活动中:

@Override
public void click(View v){
    doSearch((String)v.getTag());
}