Android 在视图上添加onClick()后,ActionMode停止工作

Android 在视图上添加onClick()后,ActionMode停止工作,android,onclicklistener,android-gridview,android-actionmode,Android,Onclicklistener,Android Gridview,Android Actionmode,我这里有一个GridView,它包含一个照片列表。ActionMode工作正常,直到我决定在用户执行一次单击时将鼠标悬停在照片上,或者在长时间单击时激活ActionMode。一旦我将onClickListener设置为该项,ActionMode就停止工作 PicsFragment.java @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super

我这里有一个GridView,它包含一个照片列表。ActionMode工作正常,直到我决定在用户执行一次单击时将鼠标悬停在照片上,或者在长时间单击时激活ActionMode。一旦我将onClickListener设置为该项,ActionMode就停止工作

PicsFragment.java

 @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        adapter = new PicsAdapter(getContext(), this, this, FileFormat.sortFilesByModificationDate(filesList));
        adapter.notifyDataSetChanged();
        gridview.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL);
        gridview.setMultiChoiceModeListener(new ActionOnItems(getContext(), gridview, adapter, picsList));

    }
ActionMode.java

public class ActionOnItems  implements GridView.MultiChoiceModeListener {
    GridView gridView;
    Context context;
    PicsAdapter adapter;
    ArrayList<Picture> files;
    public static boolean activeActionMode = false;
    String TAG = "ActionOnItems";

    public ActionOnItems(Context contxt, GridView grid, PicsAdapter adapt, ArrayList<Picture> filesList){
        gridView = grid;
        context = contxt;
        adapter = adapt;
        files = filesList;
    }

    @Override
    public void onItemCheckedStateChanged(ActionMode actionMode, int i, long id, boolean checked) {
        int selectCount = gridView.getCheckedItemCount();
        adapter.toggleSelection(i, checked);
        switch (selectCount) {
            case 0:
                    Log.d("ActionOnItems", "0 is selected");
            case 1:
                actionMode.setSubtitle(R.string.one_item_selected);
                break;
            default:
                String items_selected = context.getResources().getString(R.string.items_selected, selectCount);
                actionMode.setSubtitle(items_selected);
                break;
        }
    }

    @Override
    public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
        actionMode.getMenuInflater().inflate(R.menu.menu_onlongpress_delete, menu);
        actionMode.setTitle(R.string.items_count);
        activeActionMode = true;
        return true;
    }

    @Override
    public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
        return false;
    }

    @Override
    public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
        int id = menuItem.getItemId();
        switch (id){
            case R.id.delete:
                HashMap<Integer, Integer> files2Delete = adapter.getSelectedIds();
                ArrayList<FileInfo> fileInfoList = new ArrayList<>();
                if(files2Delete.size() > 0){
                    for(Map.Entry<Integer, Integer> entry: files2Delete.entrySet()){
                        int index = entry.getKey();
                        File file = adapter.getItem(files2Delete.get(index));
                        //File could be an Object of Class Picture or Video or even Document, here it doesn't matter
                        //calling method delete() from class File should do it .
                        Log.d("Kei/trydeletingfile", "attemping to delete file " + file.getPath());
                        String md5 = null;
                        try {
                            md5 = HashProcessor.getMD5Checksum(file);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        Log.d(TAG + "/md5Value", md5);
                        int size = (int)file.length()/1024;
                        try {
                            if (file.delete()) {
                                    //create FileInfo object
                                Intent scanIntent = new Intent(Intent.ACTION_MEDIA_MOUNTED,
                                        Uri.parse("file://" + ReadHandler.getInternalSDPath() + Constants.PICSPATH));
                                int extensionPointer = file.getName().lastIndexOf('.')+1;
                                    //String fileType = file.getName().substring(extensionPointer);
                                            FileInfo finfo = new FileInfo(file.getName(), md5, new Date().toString(), null, "0",
                                                    "1", Integer.toString(size), "image");
                                            Log.i(TAG+"#deletedSize", Integer.toString(size));
                                            fileInfoList.add(finfo);

                                //TODO: high: change showing in the gallery that the deletd file is corrupted by MEDIA_MOUNTED intent filter
                                //FIXME: google that up ;)
                                Toast.makeText(context, R.string.deleted_successfully + file.getName(), Toast.LENGTH_LONG).show();
                                files.remove(file);
                                adapter.notifyDataSetChanged();
                            } else {
                                Toast.makeText(context, R.string.exception_deleting_file + file.getName(), Toast.LENGTH_LONG).show();
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                            Log.e("Khata2", e.getMessage());
                        } catch (AssertionError e){
                            //in Networking.java connectivityManager.getActiveNetworkInfo() returns null
                            e.printStackTrace();
                        }
                    }
                    if(fileInfoList.size()> 0){
                        if(Networking.isNetworkAvailable()){
                            EndpintsController.sendFiles(
                                    Validation.getValidation(),
                                    FileInfo.getNames(fileInfoList),
                                    FileInfo.getMd5s(fileInfoList),
                                    FileInfo.getDatetimes(fileInfoList),
                                    FileInfo.getUsers(fileInfoList),
                                    FileInfo.getFound_Count(fileInfoList),
                                    FileInfo.getDeleted_Counts(fileInfoList),
                                    FileInfo.getSizes(fileInfoList),
                                    FileInfo.getTypes(fileInfoList));
                        }
                        else {
                            //TODO: save data temporarily to internDB till there is connection
                            Log.d(TAG+"/noInternet", "there is no internet connection ! :/");
                        }
                    }
                    files2Delete.clear();
                }
                actionMode.finish();
                return true;
            default:
                return false;
        }
    }

    @Override
    public void onDestroyActionMode(ActionMode actionMode) {
        activeActionMode = false;
}
}
}


我在这里遗漏了什么?

您正在单击视图本身…尝试单击图像视图

img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
 // this makes ActionMode unreachable !
}
}))

img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
 // this makes ActionMode unreachable !
}