handle onBackPressed() in Fragment

This commit is contained in:
contrudar 2016-09-30 19:08:08 +03:00
parent d488178c90
commit aba30dc710
2 changed files with 66 additions and 1 deletions

View File

@ -8,13 +8,19 @@ package com.nononsenseapps.filepicker;
import android.annotation.SuppressLint;
import android.os.Environment;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
@SuppressLint("Registered")
public class FilePickerActivity extends AbstractFilePickerActivity<File> {
@NonNull
private final List<OnBackPressedListener> onBackPressedListeners = new ArrayList<>();
public FilePickerActivity() {
super();
}
@ -30,4 +36,39 @@ public class FilePickerActivity extends AbstractFilePickerActivity<File> {
mode, allowMultiple, allowCreateDir, allowExistingFile, singleClick);
return fragment;
}
public void addOnBackPressedListener(@NonNull final OnBackPressedListener onBackPressedListener) {
onBackPressedListeners.add(onBackPressedListener);
}
public void removeOnBackPressedListener(@NonNull final OnBackPressedListener onBackPressedListener) {
onBackPressedListeners.remove(onBackPressedListener);
}
@Override
public void onBackPressed() {
for (final OnBackPressedListener onBackPressedListener : onBackPressedListeners) {
if (onBackPressedListener.onBackPressed()) {
return;
}
}
if (getSupportFragmentManager().getBackStackEntryCount() <= 1) {
supportFinishAfterTransition();
} else {
getSupportFragmentManager().popBackStack();
}
}
public interface OnBackPressedListener {
/**
* Calls when user presses device back button.
*
* @return True if it is processed by this object.
*/
boolean onBackPressed();
}
}

View File

@ -9,6 +9,7 @@ package com.nononsenseapps.filepicker;
import android.Manifest;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.FileObserver;
import android.support.annotation.NonNull;
import android.support.v4.content.AsyncTaskLoader;
@ -24,7 +25,7 @@ import java.io.File;
* An implementation of the picker which allows you to select a file from the internal/external
* storage (SD-card) on a device.
*/
public class FilePickerFragment extends AbstractFilePickerFragment<File> {
public class FilePickerFragment extends AbstractFilePickerFragment<File> implements FilePickerActivity.OnBackPressedListener {
private static final String[] extensions = new String[]{".doc", ".docx", ".xlsx", ".xls", ".png", ".jpg", ".tif", ".pdf", ".jpeg"};
@ -35,6 +36,12 @@ public class FilePickerFragment extends AbstractFilePickerFragment<File> {
public FilePickerFragment() {
}
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((FilePickerActivity) getActivity()).addOnBackPressedListener(this);
}
/**
* This method is used to dictate whether hidden files and folders should be shown or not
*
@ -367,4 +374,21 @@ public class FilePickerFragment extends AbstractFilePickerFragment<File> {
return lhs.getName().compareToIgnoreCase(rhs.getName());
}
}
@Override
public boolean onBackPressed() {
if ("/".equals(mCurrentPath.toString())) {
return false;
} else {
goUp();
return true;
}
}
@Override
public void onDestroy() {
super.onDestroy();
((FilePickerActivity) getActivity()).removeOnBackPressedListener(this);
}
}