Android 如何使用backbutton取消选中gridview中的所有项?

Android 如何使用backbutton取消选中gridview中的所有项?,android,Android,我正在使用backbutton作为活动的接口,但它对我来说工作不正常,因为在backbutton上显示0大小的arraylist //这里是activity类,我从中获得backbutton接口 public class Multiple_Images extends AppCompatActivity { @Override public void onBackPressed() { if(twice ==true){ Intent intent =n

我正在使用backbutton作为活动的接口,但它对我来说工作不正常,因为在backbutton上显示0大小的arraylist

//这里是activity类,我从中获得backbutton接口

 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); }}
//这里是适配器类,我正在使用backbutton

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;
    }
}
公共类ImageAdapter扩展BaseAdapter实现onBackPressListener{
ArrayList selectedArraylist;
@凌驾
公共布尔onBackPress(){
selectedArraylist.clear();
Toast.makeText(上下文,“未选择所有值”,Toast.LENGTH_SHORT.show();
返回true;
}
@凌驾
公共视图getView(int i、视图视图、视图组视图组){
urimodel=新的ArrayList();
最终图像视图图像网格;
活动=(活动)上下文;
actionMode=activity.startActionMode(新actionMode());
final GridModel GridModel=(GridModel)this.getItem(i);
如果(视图==null){
视图=LayoutFlater.from(上下文)。充气(R.layout.model,null);
selectedArraylist=新建ArrayList();
}
最终CardView CardView=(CardView)view.findViewById(R.id.CardView\u图像);
imageGrid=(ImageView)view.findViewById(R.id.grid\u image);
//gridText=(TextView)view.findViewById(R.id.grid\u text);
imageGrid.setScaleType(ImageView.ScaleType.CENTER\U裁剪);
//imageGrid.setScaleType(ImageView.ScaleType.CENTER\U裁剪);
Picasso.get().load(gridModel.getImage()).resize(200200).into(imageGrid);
if(selectedArraylist.contains(gridModel.getImage_text())){
设置CardBackgroundColor(选定的卡片颜色);
}否则{
cardView.setCardBackgroundColor(颜色:白色);
}
返回视图;
}
}
非常简单, 我给你我自己的项目代码,希望它能帮助你

StudentFragment.java:

private void MultiSelected_Student(int position) {
    Student data = adapter_class.getItem(position);
    if (data != null) {
        if (selectedIds.contains(data)) selectedIds.remove(data);
        else selectedIds.add(data);
    }
}

private void Remove_MultiSelected() {
    try {
        selectedIds.clear();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void Group_UnSelect() {
    Remove_MultiSelected();
    MultiSelected = false;
    fab.setVisibility(View.GONE);
    homeeActivity.studentsMultiSelect = false;
    notifyy();
}

private void notifyy() {
    adapter_class.notifyDataSetChanged();
}
HomeActivity.java:

public boolean studentsMultiSelect = false;

@Override
public void onBackPressed() {
    if (studentsMultiSelect) {
        studentFragment.Group_UnSelect();
    } else {
        super.onBackPressed();
    }
}
很容易, 我给你我自己的项目代码,希望它能帮助你

StudentFragment.java:

private void MultiSelected_Student(int position) {
    Student data = adapter_class.getItem(position);
    if (data != null) {
        if (selectedIds.contains(data)) selectedIds.remove(data);
        else selectedIds.add(data);
    }
}

private void Remove_MultiSelected() {
    try {
        selectedIds.clear();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void Group_UnSelect() {
    Remove_MultiSelected();
    MultiSelected = false;
    fab.setVisibility(View.GONE);
    homeeActivity.studentsMultiSelect = false;
    notifyy();
}

private void notifyy() {
    adapter_class.notifyDataSetChanged();
}
HomeActivity.java:

public boolean studentsMultiSelect = false;

@Override
public void onBackPressed() {
    if (studentsMultiSelect) {
        studentFragment.Group_UnSelect();
    } else {
        super.onBackPressed();
    }
}

只需在按下按钮的内部
on中执行此操作

@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);
}
@覆盖
public void onBackPressed(){
如果(两次==真){
super.onBackPressed();//这返回到上一个活动,如果您想保持意图,请在startActivity()之后添加finish()
返回;
}否则{
对于(int i=0;i

我不知道,你为什么要把
selectedArraylist=newArrayList()getView()
方法中的code>。每次新列表项膨胀时,都会激发getView(),这意味着每次更改适配器源、滚动列表时,都会调用此方法,每次初始化数组时,数组中的所有数据都会丢失。您应该像对待显示项目的工具一样对待适配器类,并且上面的所有操作都是在适配器外部进行的。

只需在反压的
内部执行即可

@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);
}
@覆盖
public void onBackPressed(){
如果(两次==真){
super.onBackPressed();//这返回到上一个活动,如果您想保持意图,请在startActivity()之后添加finish()
返回;
}否则{
对于(int i=0;i

我不知道,你为什么要把
selectedArraylist=newArrayList()getView()
方法中的code>。每次新列表项膨胀时,都会激发getView(),这意味着每次更改适配器源、滚动列表时,都会调用此方法,每次初始化数组时,数组中的所有数据都会丢失。您应该像对待显示项目的工具一样对待适配器类,上面的所有操作都会在适配器外部执行。

感谢您的回复,但在返回时,selectedArraylist显示0大小,这是主要的Issue final ArrayList selectedArraylist=new ArrayList();公共类ImageAdapter扩展了的BaseAdapter{public boolean onBackPress(){/*(int i=0;i因此,当按下后退按钮时,gridview项应该取消选择,但您的
selectedArraylist
不应该清除?对我来说,这没有意义,但如果是您的问题,您不应该清除该列表,但您是在
imageAdapter.onBackPress()中单独执行此操作的。);
method.Thank你这么多问题都解决了,它又开始工作了,再次感谢+!我添加了几句解释,你做错了什么。基本上,问题是在方法调用中,我只是更改了它,然后它开始工作以供回复,但在返回时,selectedArraylist显示0大小,这是主要的issue final ArrayList selectedArraylist=new ArrayList();公共类ImageAdapter扩展了BaseAdapter{public boolean onBackPress(){/*(int i=0;i因此,当按下后退按钮时,gridview项应该取消选择,但您的
selectedArraylist
不应该清除?对我来说,这没有意义,但如果是您的问题,您不应该清除该列表,但您是在
imageAdapter.onBackPress()中单独执行此操作的。)
method.非常感谢你,问题解决了,它又开始工作了,再次感谢+!我补充了几句解释,你做错了什么。基本上问题是我