Swipe gesture doesn't work at first. This happens when there is no item in the recyvlerview. Once a item is added and the fragement's onViewCreated Function is again called. SwipeRefreshLayout works fine even of the recyclerview is empty. The problems reappears on restart of the activity.
This issue is there on SavedFilesFragment (LInk)
Here is code
public class SavedFilesFragment extends Fragment {
private RecyclerView recyclerView;
private ProgressBar progressBar;
private final List<Status> savedFilesList = new ArrayList<>();
private final Handler handler = new Handler();
private FilesAdapter filesAdapter;
private SwipeRefreshLayout swipeRefreshLayout;
private TextView no_files_found;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_saved_files, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
recyclerView = view.findViewById(R.id.recyclerViewFiles);
swipeRefreshLayout = view.findViewById(R.id.swipeRefreshLayoutFiles);
progressBar = view.findViewById(R.id.progressBar);
no_files_found = view.findViewById(R.id.no_files_found);
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
swipeRefreshLayout.setColorSchemeColors(ContextCompat.getColor(requireActivity(), android.R.color.holo_orange_dark)
, ContextCompat.getColor(requireActivity(), android.R.color.holo_green_dark),
ContextCompat.getColor(requireActivity(), R.color.colorPrimary),
ContextCompat.getColor(requireActivity(), android.R.color.holo_blue_dark));
swipeRefreshLayout.setOnRefreshListener(this::getFiles);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), Common.GRID_COUNT));
getFiles();
}
private void getFiles()
final File app_dir = new File(Common.APP_DIR);
if (app_dir.exists() ||
Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
no_files_found.setVisibility(View.GONE);
new Thread(() -> {
File[] savedFiles;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
File f = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DCIM
) + File.separator + "status_saver");
savedFiles = f.listFiles();
} else {
savedFiles = app_dir.listFiles();
}
savedFilesList.clear();
if (savedFiles != null && savedFiles.length > 0) {
Arrays.sort(savedFiles);
for (File file : savedFiles) {
Status status = new Status(file, file.getName(), file.getAbsolutePath());
savedFilesList.add(status);
}
handler.post(() -> {
filesAdapter = new FilesAdapter(savedFilesList);
recyclerView.setAdapter(filesAdapter);
filesAdapter.notifyDataSetChanged();
progressBar.setVisibility(View.GONE);
});
} else {
handler.post(() -> {
progressBar.setVisibility(View.GONE);
no_files_found.setVisibility(View.VISIBLE);
// Toast.makeText(getActivity(), "Dir doest not exists", Toast.LENGTH_SHORT).show();
});
}
swipeRefreshLayout.setRefreshing(false);
}).start();
} else {
no_files_found.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.GONE);
}
}
I tried creating a Button to call the same function getFiles() but the Button too doesn't work the same way