首页 > 解决方案 > 如何使用后退按钮取消选择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;
    }
}

标签: android

解决方案


只需您可以在内部执行此操作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() 每次都会触发,当一个新的列表项被膨胀时,这意味着每次,当你改变适配器源,滚动列表时,这个方法被调用,每次你初始化你的数组时,里面的所有数据都会丢失。您应该将适配器类视为显示项目的工具,并且像上面这样的所有操作都在外部适配器。


推荐阅读