将OnClick事件设置为窗口小部件

时间:2013-05-07 15:42:42

标签: android view widget

我在layouts文件夹中有一个名为 otro_layout_relativo.xml 的文件,它包含:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".TimelineActivity" >

    <TextView
        android:id="@+id/tvOlrTitulo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/ivOlrImgPerfil"
        android:layout_marginBottom="15dp"
        android:layout_toRightOf="@+id/ivOlrImgPerfil"
        android:text="Baño de burbujas"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <ImageView
        android:id="@+id/ivOlrImgBebe"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/ivOlrImgPerfil"
        android:layout_alignTop="@+id/tvOlrTitulo"
        android:layout_marginLeft="30dp"
        android:layout_marginTop="16dp"
        android:src="@drawable/imagen_bebe" />

    <ImageView
        android:id="@+id/ivOlrImgPerfil"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginTop="38dp"
        android:src="@drawable/foto_perfil_papa" />

    <TextView
        android:id="@+id/tvOlrFecha"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/ivOlrImgPerfil"
        android:text="02/28\n1992"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textSize="10sp" />

</RelativeLayout>

在我的 MainActivity 中,我有以下内容:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_main);


    botAniadir = (Button) findViewById(R.id.botAniadir);
    mainLinearLayout = (LinearLayout) findViewById(R.id.main_linear_layout);

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

            relativeLayout = (RelativeLayout) View.inflate(this, R.layout.otro_layout_relativo, null);


            ((TextView) relativeLayout.findViewById(R.id.tvOlrTitulo)).setText("Elemento " + i);
            ((ImageView) relativeLayout.findViewById(R.id.ivOlrImgBebe)).setId(i);

            ivFoto = (ImageView) relativeLayout.findViewById(R.id.ivOlrImgBebe);
            ivFoto.setOnClickListener(new ListenerImagen());
            /*ivFoto.setOnClickListener(new OnClickListener(){
                @Override
                public void onClick(View v) {

                    Log.v("TAG", "onClick");

                    Log.v("ID", String.valueOf(v.getId()));

                }   
            });*/

            mainLinearLayout.addView(relativeLayout);

        }

我想要做的是将OnClickListener设置为ivFoto小部件(ImageView)。我尝试将类设置为监听器和匿名类,但两者都给我错误并使应用程序崩溃。

ListenerImage 中我有:

public class ListenerImagen implements android.view.View.OnClickListener {

@Override
public void onClick(View v) {

        View padre = (View) v.getParent();

        if (padre != null) {

            Log.v("Listener", "Cliiiiik!");

        }

    }



}

有没有形式可以做到这一点?

此致,Alex。

2 个答案:

答案 0 :(得分:2)

由于View.onClickListener是单击视图时要调用的回调的接口定义。您可以这样做:

ImageView your_image = (ImageView)findViewById(R.id.your_image);

your_image.setOnClickListener(new View.OnClickListener() {          
            @Override
            public void onClick(View arg0) {
                //do some
            }
        });

更新:这是最干净,最简单的方法,但您也可以让您的活动实现View.onClickListener并覆盖onClick()方法。

答案 1 :(得分:0)

你做不到。多个活动无法同时显示,您从不自己实施活动。

将监听器放在包含它的活动内的按钮上。而且你最好使用内部类(或匿名内部类)来监听视图。通过将活动设置为侦听器来直接执行此操作并不是一个好习惯,因为如果您有许多侦听器,代码会变得臃肿。