次のアダプターがあります。
private class RepeatingAdapter extends ArrayAdapter<Repeatable> {
private List<Repeatable> items;
private LayoutInflater inflater;
private int resource;
public RepeatingAdapter(Context context, int resource,
List<Repeatable> items) {
super(context, resource, items);
this.items=items;
this.resource=resource;
inflater=LayoutInflater.from(context);
}
@Override
public View getView(int position, View view, ViewGroup group) {
View item=(view==null) ? inflater.inflate(resource, null) : view;
TextView title=(TextView)item.findViewById(R.id.listItemRepeatingTypeTitle);
title.setText(items.get(position).getTitle());
items.get(position).setCommand(new RedRectangleCommand(item));
Log.e("view", item.toString());
return item;
}
@Override
public Repeatable getItem(int position) {
return items.get(position);
}
}
新しい RedRectangleCommand を作成し、View created をそれに送信することに注意してください。そのため、次のことも行います。
repeatingList.setAdapter(new RepeatingAdapter(this,
R.layout.list_item_repeating_type, types));
repeatingList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
((Repeatable)parent.getItemAtPosition(position)).mark();
}
});
選択したアイテムに対して mark() メソッドを実行することに注意してください (Repeatable の Mark メソッドは、コマンドに対して mark() メソッドを実行します)。すべてが良いです。コマンドの最後のコード:
private class RedRectangleCommand extends Command {
private View view;
public RedRectangleCommand(View view) {
this.view=view;
}
@Override
public void mark() {
ImageView image=(ImageView)view.findViewById(R.id.listItemRepeatingTypeImage);
image.setBackgroundColor(Color.RED);
image.invalidate();
}
@Override
public void unmark() {
ImageView image=(ImageView)view.findViewById(R.id.listItemRepeatingTypeImage);
image.setBackgroundColor(Color.BLACK);
}
}
クリックして選択したビューから ImageView の色を変更する必要があります。しかし、うまくいきません!また、私のログは、選択されたアイテムとコマンドからのアイテムが異なるものであることを示しています。どうしたの?