android - 如何使用后退按钮取消选择gridview中的所有项目?
问题描述
我正在使用后退按钮作为活动的界面,但它对我来说无法正常工作,因为在后台显示数组列表的大小为 0
// 这是我从中获取后退按钮界面的活动类..
public class Multiple_Images extends AppCompatActivity {
@Override
public void onBackPressed() {
if(twice ==true){
Intent intent =new Intent(this,MainActivity.class);
startActivity(intent);
}ImageAdapter imageAdapter =new ImageAdapter(this);
imageAdapter.onBackPress();
Toast.makeText(this, "Press twice", Toast.LENGTH_SHORT).show();
twice =true;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
twice =false; } }, 2000); }}
//这是我使用后退按钮的适配器类
public class ImageAdapter extends BaseAdapter implements onBackPressListener {
ArrayList<String> selectedArraylist ;
@Override
public boolean onBackPress() {
selectedArraylist.clear();
Toast.makeText(context, "All values unselected", Toast.LENGTH_SHORT).show();
return true;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
urimodel=new ArrayList<>();
final ImageView imageGrid ;
Activity activity = (Activity) context;
actionMode = activity.startActionMode(new Actionmode());
final GridModel gridModel=(GridModel) this.getItem(i);
if(view==null) {
view = LayoutInflater.from(context).inflate(R.layout.model, null);
selectedArraylist =new ArrayList<>();
}
final CardView cardView= (CardView)view.findViewById(R.id.cardview_image);
imageGrid = (ImageView) view.findViewById(R.id.grid_image);
// gridText = (TextView) view.findViewById(R.id.grid_text);
imageGrid.setScaleType(ImageView.ScaleType.CENTER_CROP);
// imageGrid.setScaleType(ImageView.ScaleType.CENTER_CROP);
Picasso.get().load(gridModel.getImage()).resize(200,200).into(imageGrid);
if (selectedArraylist.contains(gridModel.getImage_text())) {
cardView.setCardBackgroundColor(CARD_SELECTED_COLOR);
}else {
cardView.setCardBackgroundColor(Color.WHITE);
}
return view;
}
}
解决方案
只需您可以在内部执行此操作onBackPressed
@Override
public void onBackPressed() {
if (twice == true) {
super.onBackPressed(); //this backs to the previous activity, if you want to stay with Intent, add finish() after startActivity()
return;
} else {
for (int i = 0; i < list.size(); i++) {
if (gridView.isItemChecked(i)) {
gridView.setItemChecked(i, false);
}
}
//selectedArraylist.clear(); this is clearing your array of selected items
}
twice = true;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
twice = false;
}
}, 2000);
}
我不知道,你为什么要放入selectedArraylist =new ArrayList<>();
适配器getView()
方法。getView() 每次都会触发,当一个新的列表项被膨胀时,这意味着每次,当你改变适配器源,滚动列表时,这个方法被调用,每次你初始化你的数组时,里面的所有数据都会丢失。您应该将适配器类视为显示项目的工具,并且像上面这样的所有操作都在外部适配器。
推荐阅读
- spring - 没有关系和数学运算的 Spring JPA 连接表
- python - 当服务器运行长lua脚本时使redis客户端等待
- python - python - 数据框制作代表向量的列
- amazon-web-services - 如何通过目标 Ip 和端口号将 Socket 测试与 aws ec2 连接
- laravel - 无法从自定义开发域读取 cookie
- r - R闪亮的代码来获取从ui输入的输出
- java - Jboss Wildfly Java 兼容性
- biztalk - 监控 Biztalk 发送端口服务实例的“活动状态”
- android - 是否可以使用 Android 导航架构组件(Android Jetpack)有条件地设置 startDestination?
- machine-learning - 在 word2vec 中设置“未知”或“未知”词向量的最佳解决方案是什么?