0

on clickListViewItemに1秒追加したいと思います。すでにビュー(ImageView)を作成し、クリックをオンに設定しました。関数が呼び出されます。しかし:どうすればこのListViewItemの情報を取得できますか?ListViewでPositionを取得するだけで十分ですか?

ImageView:

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="right|center_vertical"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:onClick="favorite"
    android:src="@drawable/star" />

クリック機能のコード:

public void favorite(View view){
    ImageView iView = (ImageView) view;
    iView.setImageResource(R.drawable.star_checked);

    ViewParent v = iView.getParent();
}
4

2 に答える 2

0

匿名の内部クラスを使用します。

  ImageView iView = (ImageView) findViewById(R.id.imageView1);
  iView.setOnClickListener(new OnClickListener(){
            public void onClick(View v) {
                //Your code
            }
        });

myListView.setOnItemClickListener(new OnItemClickListener() {     ![enter image description here][2]

                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                    String value = myListView.getAdapter().getItem(position).toString(); // String value of the clicked item
                    //Code

                    }
                  });

より大きなアプリケーションを作成したい場合は、コンポーネントの命名をより適切にすることを検討する必要があります。'imageView1' はあまり便利ではありません。コンポーネントに「imageview_main」や「imageview_customerdetails」などの名前を付けます。

于 2013-01-20T20:21:17.347 に答える
0

OnClickListenerではなく OnItemClickListener をサブクラス化します。

編集:

さて、あなたが今何をしようとしているのか理解できたと思います。ListAdapter をサブクラス化し、次のgetView(int position, ...)ようにメソッドをオーバーライドします。

private OnClickListener mImgClickListener = new OnClickListener() {
        @Override
        public void onClick(View view) {
            int position = (Integer) view.getTag();
            // do stuff with position knowledge!
        }
    });

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView != null) {
        v = convertView;
    } else {
        v = newView(int position);
    }
    v.findViewById(R.id.imageView1).setTag(position);
    return v;
}

private View newView(int position) {
    View v;
    // inflate your view here
    View imageView = v.findViewById(R.id.imageView1);
    imageView.setOnClickListener(mImgClickListener);
    return v;
}

もちろん、 getView メソッドに ViewHolder パターンを実装して、コストのかかる への呼び出しをなくすとさらに効果的findViewByIdです。

View 階層が (リスト項目全体ではなく) ImageView のクリックを優先するように処理すると思いますが、間違っている可能性があります。

于 2013-01-20T20:24:50.767 に答える