无法选择多个gridview项目

问题描述 投票:2回答:2

我有一个图库的应用程序。我现在一次只能选择一张图片。但我希望能够选择多个图像并一次删除它们。我尝试了一些基于这个问题How to do multiselect functionality on grid view items on tap?的代码,但我不确定为什么它不起作用。有什么建议?

photos activity.Java

public class PhotosActivity extends AppCompatActivity {
    int int_position;
    private GridView gridView;
    GridViewAdapter adapter;
    ArrayList<Model_images> al_menu = new ArrayList<>();
    private ArrayList<Integer> mSelected = new ArrayList<Integer>();
    boolean boolean_folder;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_image_gallery);

        final ImageButton button1 = (ImageButton) findViewById(R.id.button1);
        final ImageButton button2 = (ImageButton) findViewById(R.id.button2);
        final ImageButton button3 = (ImageButton) findViewById(R.id.button3);
        final ImageButton button4 = (ImageButton) findViewById(R.id.button4);
        final ImageButton button5 = (ImageButton) findViewById(R.id.button5);
        button1.setVisibility(View.GONE);
        button2.setVisibility(View.GONE);
        button3.setVisibility(View.GONE);
        button4.setVisibility(View.GONE);
        button5.setVisibility(View.GONE);

        gridView = (GridView) findViewById(android.R.id.list);
        int_position = getIntent().getIntExtra("value", 0);
        adapter = new GridViewAdapter(this, al_images, int_position);
        gridView.setAdapter(adapter);

        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String abc = "file://" + al_images.get(int_position).getAl_imagepath().get(position);

                Intent i = new Intent(getApplicationContext(), FullImageActivity.class);
                i.putExtra("id", position);
                i.putExtra("folderPosition", int_position);
                i.putExtra("abc", abc);
                startActivity(i);
            }
        });

        gridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) {
                Integer position1 = new Integer(position);
                if(mSelected.contains(position1)) {
                    mSelected.remove(position1); // remove item from list
                    // update view (v) state here
                    // eg: remove highlight
                }
                else {
                    mSelected.add(position1); // add item to list
                    // update view (v) state here
                    // eg: add highlight
                }
}
java android gridview image-gallery multiple-select
2个回答
0
投票
  1. 选择模型类中选择的字段。每当选择一个项目时,set selected = true和notifyAdapter。
  2. 在适配器的onBindViewHolder()中,如果项目被选中,则更改视图的背景(别忘了写下else块)。
  3. 还要删除项目,在适配器或活动中维护单独的对象列表。

在你的代码中:我建议而不是保持位置维护对象列表。选择时,使用上述两个步骤在项目视图中进行更改。希望能帮助到你。


0
投票

可能如下所示

  • 维护一个列表,其中包含当前所选项目的位置。
  • 你必须更新视图,以显示是否选择了项目,我将添加代码(+注释)在哪里做。
  • 最后,列表将包含已选择的所有项目。

Example那样的东西

© www.soinside.com 2019 - 2024. All rights reserved.