私のプロジェクトには、customlistview アダプターを使用するカスタム リストビューが含まれています。すべての行にチェックボックスがあります-チェックボックスがオンになっている場合、コンテキストアクションバー(actionMode)が表示されるようにします。しかし、アクション モードを CustomListViewAdapter に実装する方法がまったくわかりません。
私が読んだすべてのチュートリアルは、actionMode を通常の MainActivity に実装することに関するものでしたが、それを customlistview アダプターに実装することに関するものはありませんでした。それは可能ではありませんか?
PS: ActionBarSherlock ライブラリを使用しています。
実際には、ファイルブラウザの作成によく使用されるリストビューを作成したいと考えています。アイテムのチェックボックスをオンにすると、アクション モードが表示され、オプション (ダウンロード、削除、移動など) を選択できます。
..:: これが私のコードです::..
MainActivity.java
public class MainActivity extends Activity {
    private ListView listview;
    private Button button;
    private List<Item> itemList;
    private CustomListViewAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        listview = (ListView) findViewById(R.id.listView1);
        button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(listener);
        listview.setOnItemClickListener(itemListener);
        itemList = new ArrayList<Item>();
        for(int i=1; i <= 20; i++) {
            Item item = new Item(R.drawable.ic_launcher, "Line " + String.valueOf(i), false);
            itemList.add(item);
        }
        adapter = new CustomListViewAdapter(this, R.layout.row, itemList);
        listview.setAdapter(adapter);
    }
    private OnClickListener listener = new OnClickListener() {
        @Override
        public void onClick(View view) {
            ArrayList<String> checkedList = new ArrayList<String>();
            for(int i=0; i < itemList.size(); i++) {
                Item item = adapter.getItem(i);
                if(item.getChecked() == true) {
                    checkedList.add(String.valueOf(item.getFile()));
                }
            }
            String output = "";
            for(int i=0; i < checkedList.size(); i++) {
                output += checkedList.get(i) + "\n";
            }
            if(!output.equals("")) {
                Toast.makeText(MainActivity.this, output, Toast.LENGTH_SHORT).show();
            }
        }
    };
    private OnItemClickListener itemListener = new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Item item = adapter.getItem(position);
            Toast.makeText(MainActivity.this, item.getFile(), Toast.LENGTH_SHORT).show();
        }
    };
}
アイテム.java
public class Item {
    private int imageID;
    private String file;
    private boolean checked;
    public Item() {
    }
    public Item(int imageID) {
        this.imageID = imageID;
    }
    public Item(int imageID, String file) {
        this.imageID = imageID;
        this.file = file;
    }
    public Item(int imageID, String file, boolean checked) {
        this.imageID = imageID;
        this.file = file;
        this.checked = checked;
    }
    public int getImageID() {
        return imageID;
    }
    public void setImageID(int imageID) {
        this.imageID = imageID;
    }
    public String getFile() {
        return file;
    }
    public void setFile(String file) {
        this.file = file;
    }
    public boolean getChecked() {
        return checked;
    }
    public void setChecked(boolean checked) {
        this.checked = checked;
    }
}
CustomListViewAdapter.java
public class CustomListViewAdapter extends ArrayAdapter<Item> {
    private Context context;
    public CustomListViewAdapter(Context context, int resourceID, List<Item> items) {
        super(context, resourceID, items);
        this.context = context;
    }
    private class ViewHolder {
        ImageView imageview;
        TextView textview;
        CheckBox checkbox;
    }
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        Item item = (Item) getItem(position);
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        if(convertView == null) {
            convertView = inflater.inflate(R.layout.row, null);
            holder = new ViewHolder();
            holder.imageview = (ImageView) convertView.findViewById(R.id.imageView1);
            holder.textview = (TextView) convertView.findViewById(R.id.textView1);
            holder.checkbox = (CheckBox) convertView.findViewById(R.id.checkBox1);
            convertView.setTag(holder);
            holder.checkbox.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    CheckBox checkbox = (CheckBox) view;
                    Item item = (Item) checkbox.getTag();
                    item.setChecked(checkbox.isChecked());
                }
            });
        }
        else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.checkbox.setTag(item);
        holder.imageview.setImageResource(item.getImageID());
        holder.textview.setText(item.getFile());
        holder.checkbox.setChecked(item.getChecked());
        return convertView;
    }
}