handle onBackPressed() in Fragment
This commit is contained in:
parent
d488178c90
commit
aba30dc710
|
|
@ -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();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue