setClickable () и setEnabled () не работают, но другие методы, такие как setVisibilty (), работают очень хорошо, поэтому при запуске действия в режиме действия представление рециркулятора должно быть отключено и недоступно для нажатия. я искал в Интернете решения, но ничто из них не помогло мне
класс фрагмента
public class MemoryFragment extends Fragment {
public static ListView listView;
private AbsListView.MultiChoiceModeListener multiChoiceModeListener;
public static List<Folders> foldersList = new ArrayList<>();
public static ListViewBaseAdapter listViewBaseAdapter;
public static File rootDirectory = Environment.getExternalStorageDirectory();
String[] permissions = {Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
final int permission_code = 100;
public static List<String> recyclerList = new ArrayList<>();
public static RecyclerView recyclerView;
public static RecyclerViewAdapter recyclerViewAdapter;
public static boolean isActionMode = false;
public static List<String> selectedFolders = new ArrayList<>();
public static ActionMode actionMode = null;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
if(recyclerList != null){
recyclerList.clear();
recyclerViewAdapter.notifyDataSetChanged();
}
if(listViewBaseAdapter != null) {
listViewBaseAdapter.clear();
listViewBaseAdapter.notifyDataSetChanged();
}
}catch (NullPointerException e){
}
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = getLayoutInflater().inflate(R.layout.fragment_memory, container, false);
recyclerView = view.findViewById(R.id.recycler_view);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false);
recyclerView.setLayoutManager(layoutManager);
recyclerList.add(rootDirectory.getAbsolutePath());
recyclerViewAdapter = new RecyclerViewAdapter(recyclerList);
recyclerView.setAdapter(recyclerViewAdapter);
for(int x = 0; x < permissions.length; x++)
checkPermissions(permissions, permission_code);
String[] rootNames = rootDirectory.list();
File[] files = rootDirectory.listFiles();
for (int x = 0; x < files.length; x++) {
if (files[x].isDirectory())
foldersList.add(new Folders(R.drawable.ic_folders, rootNames[x], files[x]));
else
foldersList.add(new Folders(R.drawable.ic_file, rootNames[x], files[x]));
}
listViewBaseAdapter = new ListViewBaseAdapter(getContext(), foldersList);
listView = view.findViewById(R.id.list_view);
listView.setAdapter(listViewBaseAdapter);
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Folders folder = foldersList.get(position);
String fileName = folder.getFile().getName();
recyclerList.add(fileName);
Folders.newFolders(position, foldersList, listViewBaseAdapter, recyclerViewAdapter);
}
});
multiChoiceModeListener = new AbsListView.MultiChoiceModeListener() {
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
MenuInflater menuInflater = mode.getMenuInflater();
menuInflater.inflate(R.menu.list_item_menu, menu);
isActionMode = true;
actionMode = mode;
recyclerView.setEnabled(false); //here is the problem 1
recyclerView.setClickable(false); //here is the problem 2
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
isActionMode = false;
actionMode = null;
selectedFolders.clear();
ListViewBaseAdapter.checkStates.clear();
}
};
listView.setMultiChoiceModeListener(multiChoiceModeListener);
return view;
}
public void checkPermissions(String[] permissions, int permission_code){
if (ContextCompat.checkSelfPermission(this.getContext(), permissions[0]) == PackageManager.PERMISSION_DENIED ||
ContextCompat.checkSelfPermission(this.getContext(), permissions[1]) == PackageManager.PERMISSION_DENIED)
requestPermissions(this.getActivity(), permissions, permission_code);
else
return;
}
public void requestPermissions(Activity activity, String[] permissions, int requestCode){
for (int x = 0; x < permissions.length; x++)
ActivityCompat.requestPermissions(activity, permissions, requestCode);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case permission_code: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] + grantResults[1] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
return;
}
// other 'case' lines to check for other
// permissions this app might request.
}
}
}
класс адаптера рециркулятора
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
private List<String> folderNames;
public RecyclerViewAdapter(List folderNames){
this.folderNames = folderNames;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_view_adapter, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
holder.imageView.setImageResource(R.drawable.ic_arrow);
holder.textView.setText(folderNames.get(position));
holder.textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(folderNames.get(0).equals(SDCardFragment.path))
Folders.backToFolder(position, SDCardFragment.recyclerList, SDCardFragment.listViewBaseAdapter, RecyclerViewAdapter.this);
else
Folders.backToFolder(position, MemoryFragment.recyclerList, MemoryFragment.listViewBaseAdapter, RecyclerViewAdapter.this);
}
});
}
@Override
public int getItemCount() {
return folderNames.size();
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public static class ViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
TextView textView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.image_view);
textView = itemView.findViewById(R.id.text);
}
}
}