0

我有一个包含图像的列表视图。我想在单击图像时进行操作。从我的适配器执行此操作,但我想从列表视图所在的主要活动中执行此操作。

我有我的自定义适配器:

ImageView myImage=(ImageView) convertView.findViewById(R.id.myimage);
            byte []temp = theItems.getImagemyItems();
            Bitmap image = BitmapFactory.decodeByteArray(temp, 0, temp.length);
            myImage.setImageBitmap(image);

            myImage.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    Toast.makeText(context, "CLICKED!", Toast.LENGTH_SHORT).show();      


                }
            });

以上工作正常。如果我从 mainactivity 尝试:

View inflatedView = getLayoutInflater().inflate(R.layout.showadapterlist, null);
this.imageView = (ImageView) inflatedView.findViewById(R.id.myimage);   

 imageView.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    Toast.makeText(getBaseContext(), "CLICKED!", Toast.LENGTH_SHORT).show();      

                }

            }); 

它不起作用。没有任何反应。

4

3 回答 3

2

您不必为 ListView 对象设置 OnClickListener。您可以在创建时将点击侦听器传递给您的适配器。尝试这样的事情:

class YourActivity extends Activity {
    protected onCreate(Bundle saveInstaceState) {
       super.onCreate(saveInstaceState);
       // some code here
       YourAdapter adapter = new Adapter(this, clickListener);
       listview.setAdapter(adapter);
       // more code here
   }
}

并且你的类适配器应该有一个构造函数来保存这个监听器:

public YourAdapter {
    public YourAdapter(Context context, OnClickListener listener) {
      // set everithing you need
      this.listener = listener;
    }

    public View getView (...) {
    // do everithig you need
    myImage.setOnClickListener(listener);
    }
}
于 2013-04-24T15:26:29.603 回答
2

尝试使用 onTouch 事件,或更改图像按钮的图像...

但是最好使用主要的 onClick 方法()

@Override
public void onClick(final View v) {
         switch(v.getId()){
             case R.id.myimage:
                  //Do it when myimage is clicked
                  Toast.makeText(class.this, "CLICKED!",Toast.LENGTH_SHORT).show();                   
             break;
             case R.id.otherID:
                  //Do something when other item is clicked
             break;
          }

}

和 onClick 听众说再见......

其他选项是在布局中设置属性 onclick ... 一个例子:

 <ImageView
      android:id="@+id/myimage"
      android:layout_width="170dp"
      android:layout_height="115dp"
      android:onClick="yourmethodname"
      android:scaleType="centerCrop"
      android:src="@drawable/iconcamera3" />

并在 java 类中添加:

public void yourmethodname(final View v) {
     Toast.makeText(class.this, "CLICKED!",Toast.LENGTH_SHORT).show();   
     //Do anything what you want to do on the onClick event

}

我不喜欢使用 onclick 侦听器,所以我使用这些方法并且从未失败过.. 尝试一下...

编辑:为了使用第一种方法,覆盖 onClick 方法,首先我们必须实现 onClickListener:

import android.view.View.OnClickListener;
public class AnyClass extends Activity implements OnClickListener{
@Override
public void onClick(final View v) {
         switch(v.getId()){
             case R.id.myimage:
                  //Do it when myimage is clicked
                  Toast.makeText(class.this, "CLICKED!",Toast.LENGTH_SHORT).show();                   
             break;
             case R.id.otherID:
                  //Do something when other item is clicked
             break;
          }

}
}
于 2013-04-24T15:26:33.320 回答
0

尝试将此属性添加到您的图像视图:

安卓:可聚焦=“假”

安卓:focusableInTouchMode="假"

机器人:可点击=“假”

于 2013-04-24T15:09:24.080 回答