右側に画像のある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);
}
_
}
コーディングが少しくだらないことはわかっているので、我慢してください。実際のプロセスを示したいだけです。
それは私のために働いています:)
Adapter
Activity
ではありませんで行う必要があります
yourImg.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// things you want to do
}
});
アダプターからアクティビティーに通信するための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
}
}
最後の回答に追加し、この回答を参照して、アイテムまたは他のアクションを削除した後にビューを更新するためのコードを追加しました。
//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();
}
}
それは私のために働きます、楽しんでください!!