无法 select 多个 gridview 项目
Not able to select multiple gridview items
我有一个图片库应用程序。我现在一次只能 select 一张图片。但我希望能够 select 多张图片并一次删除它们。我尝试了一些基于这个问题 How to do multiselect functionality on grid view items on tap? 的代码,但我不确定为什么它不起作用。有什么建议吗?
PhotosActivity.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
}
}
也许可以按照下面的方式进行
- 维护一个包含当前位置的列表
选定的项目。
- 您必须更新视图,以显示项目是否被选中,我
将在何处添加代码(+评论)。
- 最后,列表将包含所有已选择的项目。
类似的东西Example
在模型中选择一个字段class。每当一个项目是
选择集 selected=true 和 notifyAdapter 。
在您的适配器的 onBindViewHolder() 中如果项目被选中更改
视图的背景(不要忘记写 else 块)。
还要删除项目,在适配器或activity中维护单独的对象列表。
在您的代码中:我建议维护对象列表而不是维护位置。
使用上述 2 个步骤在选中时更改项目的视图。
希望对你有帮助。
我有一个图片库应用程序。我现在一次只能 select 一张图片。但我希望能够 select 多张图片并一次删除它们。我尝试了一些基于这个问题 How to do multiselect functionality on grid view items on tap? 的代码,但我不确定为什么它不起作用。有什么建议吗?
PhotosActivity.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
}
}
也许可以按照下面的方式进行
- 维护一个包含当前位置的列表 选定的项目。
- 您必须更新视图,以显示项目是否被选中,我 将在何处添加代码(+评论)。
- 最后,列表将包含所有已选择的项目。
类似的东西Example
在模型中选择一个字段class。每当一个项目是 选择集 selected=true 和 notifyAdapter 。
在您的适配器的 onBindViewHolder() 中如果项目被选中更改 视图的背景(不要忘记写 else 块)。
还要删除项目,在适配器或activity中维护单独的对象列表。
在您的代码中:我建议维护对象列表而不是维护位置。 使用上述 2 个步骤在选中时更改项目的视图。 希望对你有帮助。