0

私のプロジェクトには、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;
    }
}
4

1 に答える 1