16

ListView右側に画像があります。onClickの画像をクリックしてリスナーイベントを実行したかったのListViewです。参考までに画像をご覧ください。

ここに画像の説明を入力してください

私は基本的なOnClickリスナーの実装を知っていますが、これは私には少し注意が必要なようです:P

言及するのを忘れて、実際ListViewをクリックすると新しいアクティビティが発生するので、両方のスキーマを維持する必要があります。

 listView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
            eventsData.remove(id);
            cursor.requery(); 
        }

    });   

上記のコードは、リスト要素をクリックして削除eventsData.remove(id);を実行します。これは、このタスクを実行するためのデータベースヘルパーです。今言ったように、リスト要素全体ではなく、画像をクリックしてこれと同じプロセスを実行するメソッドが必要です。後でリスト要素に他のアクションを実行させたいと思います。

私は今、私が少し明確になっていることを願っています。


ソリューション:

誰かが同じ種類の状況に遭遇した場合は、ここにアダプターの完全なコードがあります。

 class CustomAdapter extends ArrayAdapter<String> {
 CustomAdapter() {
  super(Activity.this, R.layout.row, R.id.label, items);
}

public View getView(final int position, View convertView,
                    ViewGroup parent) {
  View row=super.getView(position, convertView, parent);
  deleteImg=(ImageView)row.findViewById(R.id.icon);

  deleteImg.setImageResource(R.drawable.delete);      
  deleteImg.setOnClickListener(new OnClickListener() {
      String s = items[position];
    @Override
    public void onClick(View v) {
        Toast.makeText(context, s, Toast.LENGTH_SHORT).show();          
    }
});

  return(row);
}

}

コーディングが少しくだらないことはわかっているので、我慢してください。実際のプロセスを示したいだけです。

それは私のために働いています:)

4

3 に答える 3

9

あなたはあなたの中でそれをするべきではありませAdapter Activity

yourImg.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // things you want to do 
    }
});
于 2012-05-23T07:24:16.590 に答える
3

アダプターからアクティビティーに通信するための1つのインターフェースを作成します

public interface ListenerActivity        
{    
public void Remove();    
}

アダプタクラスの場合:

class CustomAdapter extends ArrayAdapter<String> {

ListenerActivity listener;

CustomAdapter(YourActivity obj) {
  super(Activity.this, R.layout.row, R.id.label, items);

  listener=obj;
}
 public View getView(final int position, View convertView,
                ViewGroup parent) {
ImageId.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        listener.Remove();
    }
});
}

あなたの活動で:

class MyActivity extends Activity implements ListenerActivity
{
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
}
 @Override
    public void Remove() {

//Do your remove functionality here
    }         
}
于 2014-02-17T08:09:42.827 に答える
2

最後の回答に追加し、この回答を参照して、アイテムまたは他のアクションを削除した後にビューを更新するためのコードを追加しました。

//in your adapter you have to get list of items:

 public CartListAdapter(Context context, int resourceId,
        List<CartItemModel> items) {
    super(context, resourceId, items);
    this.context = context;
    this.items= items;
}

//after that you have to set a listner on the imageView like this:

public View getView(int position, View convertView, ViewGroup parent) {
   holder.imageViewDelete.setOnClickListener(new imageViewClickListener(position));
   // some other lines code ...
   // here we get the item to remove
    rowItem= getItem(position);
    }

//and here the definition of the listner:

private class imageViewClickListene implements OnClickListener {
   int position;
    public imageViewClickListene( int pos)
        {
            this.position = pos;
        }

    public void onClick(View v) {

    // here we  remove the selected item    
        items.remove(rowItem);
            // here we refresh the adapter
        CartListAdapter.this.notifyDataSetChanged();

}
}

それは私のために働きます、楽しんでください!!

于 2013-02-18T15:09:42.117 に答える