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();      


                }
            });

上記は正常に動作します。メインアクティビティから試してみると:

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

OnClickListener を ListView オブジェクトに設定する必要はありません。アダプターを作成するときに、クリックリスナーをアダプターに渡すことができます。次のようなことを試してください:

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 イベントを使用してみるか、imagebutton の画像を変更してください...

しかし、メインの onClick method() で行う方が良いです

@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

この属性をイメージビューに追加してみてください:

アンドロイド: フォーカス可能 =「false」

android:focusableInTouchMode="false"

アンドロイド: クリック可能 = "false"

于 2013-04-24T15:09:24.080 に答える