下面列出了android.app.FragmentManager#findFragmentByTag ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private void restoreRetainedDataFragment() {
// find the retained fragment
FragmentManager fm = getFragmentManager();
mRetainedDataFragment = (DataFragment) fm.findFragmentByTag(TAG);
if (mRetainedDataFragment == null) {
// Create
mRetainedDataFragment = new DataFragment();
fm.beginTransaction().add(mRetainedDataFragment, TAG).commit();
mDataBuffer = new ArrayList<>();
mTextSpanBuffer = new SpannableStringBuilder();
} else {
// Restore status
mShowDataInHexFormat = mRetainedDataFragment.mShowDataInHexFormat;
mTextSpanBuffer = mRetainedDataFragment.mTextSpanBuffer;
mDataBuffer = mRetainedDataFragment.mDataBuffer;
mSentBytes = mRetainedDataFragment.mSentBytes;
mReceivedBytes = mRetainedDataFragment.mReceivedBytes;
}
}
public static Completable getObservable(RxActivity activity)
{
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M || (
ContextCompat.checkSelfPermission(
activity,
Manifest.permission.READ_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
&& ContextCompat.checkSelfPermission(
activity,
Manifest.permission.WRITE_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED)
)
return Completable.complete();
FragmentManager fm = activity.getFragmentManager();
ExtStorageWritePermisisonCheckFragment f = (ExtStorageWritePermisisonCheckFragment) fm.findFragmentByTag(TAG);
if(f == null)
{
f = new ExtStorageWritePermisisonCheckFragment();
activity.getFragmentManager().beginTransaction().add(f, TAG).commit();
}
return f._extStoragePermissionCheckSubject;
}
@Override
public void showRequestPermissionRationale(@NonNull String rationale,
@NonNull String positiveButton,
@NonNull String negativeButton,
@StyleRes int theme,
int requestCode,
@NonNull String... perms) {
FragmentManager fm = getHost().getFragmentManager();
// Check if fragment is already showing
Fragment fragment = fm.findFragmentByTag(RationaleDialogFragment.TAG);
if (fragment instanceof RationaleDialogFragment) {
Log.d(TAG, "Found existing fragment, not showing rationale.");
return;
}
RationaleDialogFragment
.newInstance(positiveButton, negativeButton, rationale, theme, requestCode, perms)
.showAllowingStateLoss(fm, RationaleDialogFragment.TAG);
}
private void closeDialogIfOpen(String tag) {
FragmentManager manager = getFragmentManager();
if (manager == null) {
// Do nothing if the manager doesn't exist yet; see http://crbug.com/480544.
return;
}
DialogFragment df = (DialogFragment) manager.findFragmentByTag(tag);
if (df != null) {
df.dismiss();
}
}
private void openLocation(Location locToOpen)
{
FragmentManager fm = getFragmentManager();
String openerTag = LocationOpenerBaseFragment.getOpenerTag(locToOpen);
if(fm.findFragmentByTag(openerTag)==null)
{
LocationOpenerBaseFragment opener = LocationOpenerBaseFragment.getDefaultOpenerForLocation(locToOpen);
Bundle openerArgs = new Bundle();
LocationsManager.storePathsInBundle(openerArgs, locToOpen, null);
openerArgs.putString(LocationOpenerBaseFragment.PARAM_RECEIVER_FRAGMENT_TAG, getTag());
opener.setArguments(openerArgs);
fm.beginTransaction().add(opener, openerTag).commit();
}
}
private void cancelCalcTask()
{
FragmentManager fm = getFragmentManager();
if(fm == null)
return;
TaskFragment tf = (TaskFragment) fm.findFragmentByTag(CalcPropertiesTaskFragment.TAG);
if(tf!=null)
tf.cancel();
}
/**
* Get the retainFragment - search it by the index. If not found, create a new one.
*
* @param fm The fragment manager handling this fragment.
* @param index The index of the view (required in case of multiple PinchImageViews to be retained).
* @return the retainFragment.
*/
@NonNull
public static RetainFragment findOrCreateRetainFragment(@NonNull final FragmentManager fm, final int index) {
RetainFragment fragment = (RetainFragment) fm.findFragmentByTag(TAG + index);
if (fragment == null) {
fragment = new RetainFragment();
try {
fm.beginTransaction().add(fragment, TAG + index).commit();
}
catch (IllegalStateException e) {
TrackingUtil.sendException("opv1", e);
}
}
return fragment;
}
public static void showDialogFragment(final DialogFragment dialog,
final String tag, final FragmentManager fragmentManager) {
final FragmentTransaction ft = fragmentManager.beginTransaction();
final Fragment prev = fragmentManager.findFragmentByTag(tag);
if (prev != null) {
ft.remove(prev);
}
ft.add(dialog, tag);
ft.commitAllowingStateLoss();
}
@Override
/* @inheritDoc */
public void openDialogFragment(String fragmentTag, DialogFragment fragment) {
Activity activity = getActivity();
if (activity != null) {
FragmentManager fragmentMgr = activity.getFragmentManager();
FragmentTransaction ft = fragmentMgr.beginTransaction();
DialogFragment oldFragment = (DialogFragment) fragmentMgr
.findFragmentByTag(fragmentTag);
if (oldFragment == null) {
fragment.show(ft, fragmentTag);
}
}
}
/**
* Get the retainFragment - search it by the index. If not found, create a new one.
*
* @param fm The fragment manager handling this fragment.
* @param index The index of the view (required in case of multiple PinchImageViews to be retained).
* @return the retainFragment.
*/
@NonNull
public static RetainFragment findOrCreateRetainFragment(@NonNull final FragmentManager fm, final int index) {
RetainFragment fragment = (RetainFragment) fm.findFragmentByTag(TAG + index);
if (fragment == null) {
fragment = new RetainFragment();
fm.beginTransaction().add(fragment, TAG + index).commit();
}
return fragment;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.cast_activity);
loadAndSetupViews();
mVolumeIncrement = CastUtils.getFloatFromPreference(this, VideoCastManager.PREFS_KEY_VOLUME_INCREMENT);
try {
mCastManager = VideoCastManager.getInstance(this);
} catch (CastException e) {
// logged already
}
setupActionBar();
Bundle extras = getIntent().getExtras();
if (null == extras) {
finish();
return;
}
FragmentManager fm = getFragmentManager();
VideoCastControllerFragment mediaAuthFragment = (VideoCastControllerFragment) fm.findFragmentByTag("task");
// if fragment is null, it means this is the first time, so create it
if (mediaAuthFragment == null) {
mediaAuthFragment = VideoCastControllerFragment.newInstance(extras);
fm.beginTransaction().add(mediaAuthFragment, "task").commit();
mListener = mediaAuthFragment;
setOnVideoCastControllerChangedListener(mListener);
} else {
mListener = mediaAuthFragment;
mListener.onConfigurationChanged();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FragmentManager fm = getFragmentManager();
whatIsMaterialFragment = (WhatIsMaterialFragment) fm.findFragmentByTag(WhatIsMaterialFragment.TAG);
if (whatIsMaterialFragment == null) {
whatIsMaterialFragment = WhatIsMaterialFragment.newInstance();
addFragment(whatIsMaterialFragment, WhatIsMaterialFragment.TAG);
}
}
private void addListenerFragment() {
//fragment监听销毁界面关闭引导层
if (fragment != null && Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN) {
compatibleFragment(fragment);
FragmentManager fm = fragment.getChildFragmentManager();
ListenerFragment listenerFragment = (ListenerFragment) fm.findFragmentByTag(LISTENER_FRAGMENT);
if (listenerFragment == null) {
listenerFragment = new ListenerFragment();
fm.beginTransaction().add(listenerFragment, LISTENER_FRAGMENT).commitAllowingStateLoss();
}
listenerFragment.setFragmentLifecycle(new FragmentLifecycleAdapter() {
@Override
public void onDestroyView() {
LogUtil.i("ListenerFragment.onDestroyView");
remove();
}
});
}
if (v4Fragment != null && v4Fragment.isAdded()) {
android.support.v4.app.FragmentManager v4Fm = v4Fragment.getChildFragmentManager();
V4ListenerFragment v4ListenerFragment = (V4ListenerFragment) v4Fm.findFragmentByTag(LISTENER_FRAGMENT);
if (v4ListenerFragment == null) {
v4ListenerFragment = new V4ListenerFragment();
v4Fm.beginTransaction().add(v4ListenerFragment, LISTENER_FRAGMENT).commitAllowingStateLoss();
}
v4ListenerFragment.setFragmentLifecycle(new FragmentLifecycleAdapter() {
@Override
public void onDestroyView() {
LogUtil.i("v4ListenerFragment.onDestroyView");
remove();
}
});
}
}
static void show(Fragment fragment) {
FragmentManager manager = fragment.getActivity().getFragmentManager();
if (manager.findFragmentByTag(TAG) == null) {
FakeSignatureGlobalWarningDialog dialog = new FakeSignatureGlobalWarningDialog();
dialog.setTargetFragment(fragment, /* requestCode: */ 0);
dialog.show(manager, TAG);
}
}
private void removeFragmentB() {
FragmentManager fragmentManager = getFragmentManager();
Fragment fragment = fragmentManager.findFragmentByTag(FragmentB.TAG);
if (null != fragment) {
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.remove(fragment).commit();
}
//remove() only goes down to onDestroyView(), not onDestroy() and onDetach()
//if addToBackStack(), back button will goes down to onDetach()
}
static void show(Fragment fragment) {
FragmentManager manager = fragment.getActivity().getFragmentManager();
if (manager.findFragmentByTag(TAG) == null) {
FakeSignatureGlobalWarningDialog dialog = new FakeSignatureGlobalWarningDialog();
dialog.setTargetFragment(fragment, /* requestCode: */ 0);
dialog.show(manager, TAG);
}
}
/**
* Switches to the passed fragment
* If the currently shown fragment has the same type as the argument, does nothing. Otherwise,
* removes the current fragment and makes a new fragment of the passed in type and shows it
* @param type the fragment to switch to
* @param arguments arguments to give to the fragment
*/
private void swapScreens(FragmentType type, @Nullable Bundle arguments) {
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
// if we already have a fragment and that fragment is not the fragment we want to show, remove it
// otherwise, it is the fragment we want to show, so we're done, just return and abort the transaction
if (manager.findFragmentByTag("fragment") != null) {
if (((HiddenSettingsFragment) manager.findFragmentByTag("fragment")).getType() != type) {
transaction.remove(manager.findFragmentByTag("fragment"));
} else {
return;
}
}
// Make a new fragment
Fragment newFragment = null;
switch (type) {
case SETTINGS_LIST:
newFragment = new SettingsListFragment();
break;
case JANITOR_LOGIN:
newFragment = new JanitorLoginFragment();
break;
case THREAD_WATCHER:
newFragment = new ThreadWatcherFragment();
break;
case AWOO_ENDPOINT:
newFragment = new AwooEndpointFragment();
break;
case DEBUG_SETTINGS_LIST:
newFragment = new DebugSettingsListFragment();
break;
case COLOR_LIST:
newFragment = new ColorListFragment();
break;
case PROPERTY_EDITOR:
newFragment = new PropertyEditorFragment();
break;
case PROPERTY_EDITOR_NEW:
newFragment = new NewPropertyFragment();
break;
case PROPERTIES_LIST:
newFragment = new PropertiesListFragment();
break;
case HIDDEN_LIST:
newFragment = new HiddenThreadListFragment();
break;
case NOTIFICATION_SETTINGS:
newFragment = new NotificationSettingsFragment();
break;
case COLOR_PICKER:
newFragment = new ColorPickerFragment();
break;
}
newFragment.setArguments(arguments);
// Put the fragment in our layout
//transaction.add(newFragment, "fragment");
transaction.replace(R.id.userscript_activity_main_fragment, newFragment, "fragment");
transaction.addToBackStack("fragment"); // TODO is this needed?
transaction.commit();
}
public static HomeFragment get(FragmentManager fm) {
return (HomeFragment) fm.findFragmentByTag(TAG);
}
public static PickFragment get(FragmentManager fm) {
return (PickFragment) fm.findFragmentByTag(TAG);
}
private void showDetailFragment(int containerId, String rssItemUrl, boolean addToBackStack) {
// find detail fragment first
FragmentManager fm = getFragmentManager();
RssfeedDetailFragment detailFragment =
(RssfeedDetailFragment) fm.findFragmentByTag(TAG_DETAIL);
if (detailFragment == null) {
// create new detail fragment
detailFragment = RssfeedDetailFragment.instantiate(rssItemUrl);
// add fragment to the layout
addDetailFragment(detailFragment, containerId, addToBackStack, fm);
} else if (detailFragment.getId() != containerId) {
// remove fragment from old container
fm.beginTransaction().remove(detailFragment).commit();
fm.executePendingTransactions();
// add fragment to the new container
addDetailFragment(detailFragment, containerId, addToBackStack, fm);
} // else, fragment is already at the right place
detailFragment.setUrl(rssItemUrl);
}