在视图上添加 onClick() 后,操作模式停止工作



所以我这里有一个GridView,其中包含照片列表。动作模式工作正常,直到我决定在用户执行一次单击时将鼠标悬停在照片上,或者在他们长按时激活动作模式。一旦我将onClickListener设置为该项目,动作模式就停止工作了!

图片片段.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));
}

动作模式.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;
}
}

PicsAdapter.java(我正在设置 onClick on GridView 的每个项目(

@Override
public View getView(final int i, final View view, ViewGroup viewGroup) {
View listItemView = view;
if (listItemView == null) {
listItemView = LayoutInflater.from(context).inflate(
R.layout.layout_pics_template, viewGroup, false);
}
listItemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// this makes ActionMode unreachable !
}
});
ImageView img = listItemView.findViewById(R.id.img);
Bitmap myBitmap = ImageProcessing.reduceImageSize(getItem(i)); 
img.setImageBitmap(myBitmap);
img.setScaleType(ImageView.ScaleType.CENTER_CROP);
img.setPadding(8, 8, 8, 8);
return listItemView;

}

我在这里错过了什么?

您正在单击视图...尝试点击图像视图

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

}(;

最新更新