下面列出了怎么用android.app.Fragment的API类实例代码及写法,或者点击链接到github查看源代码。
/**
* 切换fragment,附带一个动画效果
*
* @param fragment
* @param tag 没有赋null即可
*/
private void pendingFragment(Fragment fragment, String tag) {
FragmentManager fragmentManager = getFragmentManager();
Fragment tmp = fragmentManager.findFragmentByTag(tag);
if (tmp == null || !tmp.isVisible()) {
fragmentManager
.beginTransaction()
.setCustomAnimations(
R.animator.fragment_slide_left_enter,
R.animator.fragment_slide_left_exit,
R.animator.fragment_slide_right_enter,
R.animator.fragment_slide_right_exit
)
.replace(R.id.fragment_container, fragment, tag)
.addToBackStack(null)
.commit();
mScrollSettleHandler.post(new Runnable() {
@Override
public void run() {
invalidateOptionsMenu();
}
});
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
finish();
setupExitTransition();
restoreImeStateOnBackPressed();
return true;
} else if (id == R.id.action_share_app) {
Share.share(this);
return true;
} else if (id == R.id.action_pgp_choose_own_key) {
mGpgEncryptionParamsFragment.triggerSigningKeySelection(null);
return true;
} else if (id == R.id.help) {
Fragment f = mTabAdapter.getItem(mTitleIndicator.getSelectedTabPosition());
Help.ANCHOR a = null;
if (f instanceof WithHelp) {
a = ((WithHelp) f).getHelpAnchor();
}
Help.INSTANCE.open(this, a);
return true;
}
return super.onOptionsItemSelected(item);
}
private void selectItem(int position) {
// update the main content by replacing fragments
Fragment fragment = new SampleFragment();
Bundle args = new Bundle();
args.putInt(SampleFragment.ARG_IMAGE_RES, mCityImages[position]);
args.putInt(SampleFragment.ARG_ACTION_BG_RES, R.drawable.ab_background);
fragment.setArguments(args);
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
setTitle(mCityNames[position]);
mDrawerLayout.closeDrawer(mDrawerList);
}
@Override
public Fragment getItem(int position) {
assert position >= 0 && position < mPages.size();
FirstRunPage result = null;
try {
result = mPages.get(position).call();
} catch (Exception e) {
// We can always return null and it will be properly handled at the caller level.
}
if (result == null) return null;
Bundle props = new Bundle();
props.putAll(mFreProperties);
result.setArguments(props);
return result;
}
private void testBindUntilEvent(LifecycleProvider<FragmentEvent> provider) {
Fragment fragment = (Fragment) provider;
startFragment(fragment);
TestObserver<Object> testObserver = observable.compose(provider.bindUntilEvent(STOP)).test();
fragment.onAttach(null);
testObserver.assertNotComplete();
fragment.onCreate(null);
testObserver.assertNotComplete();
fragment.onViewCreated(null, null);
testObserver.assertNotComplete();
fragment.onStart();
testObserver.assertNotComplete();
fragment.onResume();
testObserver.assertNotComplete();
fragment.onPause();
testObserver.assertNotComplete();
fragment.onStop();
testObserver.assertComplete();
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
setSupportActionBar(toolbar);
if (getSupportActionBar() != null)
{
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
mNotesFragment = (NotesFragment) Fragment.instantiate(SearchActivity.this, NotesFragment.class.getName());
Bundle bundle = new Bundle();
bundle.putBoolean(NotesFragment.KEY_SEARCH_MODE, true);
mNotesFragment.setArguments(bundle);
(getFragmentManager().beginTransaction().replace(R.id.main_container, mNotesFragment)).commit();
SearchView searchView = (SearchView) findViewById(R.id.search);
searchView.onActionViewExpanded();
searchView.setOnQueryTextListener(this);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
customSetBackground(R.color.fastlane_background);
setHeaderAdapter();
setCustomPadding();
/**
* The setOnItemSelectedListener has been not only deprecated, but brutally removed by
* Google. To get around this limitation, I went to see how BaseRowFragment handled it.
* Turns out it sets a listener to the GridView (which is a RecyclerView): there you go.
*/
VerticalGridView gridView = ((MainActivity) getActivity()).getVerticalGridView(this);
gridView.setOnChildSelectedListener(new OnChildSelectedListener() {
@Override
public void onChildSelected(ViewGroup viewGroup, View view, int i, long l) {
Object obj = ((ListRow) getAdapter().get(i)).getAdapter().get(0);
getFragmentManager().beginTransaction().replace(R.id.rows_container, (Fragment) obj).commit();
((MainActivity) getActivity()).updateCurrentFragment((Fragment) obj);
}
});
}
public static void startPhotoPickerForResult(Fragment fragment, String clientId, String redirectUri, int requestCode) {
String accessToken = getAccessToken(fragment.getActivity());
if (accessToken != null) {
if (clientId.equals(cachedClientId)) {
InstagramGalleryActivity.startForResult(fragment, requestCode);
return;
} else {
logout(fragment.getActivity()); // clear cache & preferences if any.
}
}
InstagramLoginActivity.startLoginForResult(fragment, clientId, redirectUri, requestCode);
}
/**
* Create a new instanceof of {@link PassphraseDialogFragment} and set its arguments.
*/
public static PassphraseDialogFragment newInstance(Fragment target) {
assert ProfileSyncService.get() != null;
PassphraseDialogFragment dialog = new PassphraseDialogFragment();
if (target != null) {
dialog.setTargetFragment(target, -1);
}
return dialog;
}
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
Fragment fragment = (Fragment)object;
if (fragment != mCurrentPrimaryItem) {
if (mCurrentPrimaryItem != null) {
mCurrentPrimaryItem.setMenuVisibility(false);
mCurrentPrimaryItem.setUserVisibleHint(false);
}
if (fragment != null) {
fragment.setMenuVisibility(true);
fragment.setUserVisibleHint(true);
}
mCurrentPrimaryItem = fragment;
}
}
public void goToFragment(final Fragment newFragment) {
getFragmentManager().beginTransaction().add(R.id.fragment_container, newFragment).commit();
final Fragment removeFragment = currentFragment;
currentFragment = newFragment;
getWindow().getDecorView().postDelayed(new Runnable() {
@Override
public void run() {
getFragmentManager().beginTransaction().remove(removeFragment).commit();
}
}, 2000);
}
/**
* Set the view's {@link Fragment} so that when the view is clicked the
* {@link PlaceAutocompleteActivity} can be started for a result via the fragment context.
* @param f
*/
public void setFragment(Fragment f) {
final Fragment fragment = f;
input = (TextView) findViewById(R.id.place_autocomplete_search_input);
input.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
fragment.startActivityForResult(constructIntent(fragment.getActivity()), 0);
}
});
}
private void b()
{
FragmentManager fragmentmanager = getFragmentManager();
FragmentTransaction fragmenttransaction = fragmentmanager.beginTransaction();
a = (DynamicFragment)Fragment.instantiate(this, cn/com/smartdevices/bracelet/ui/DynamicFragment.getName());
fragmenttransaction.add(0x7f0a01bf, a, "DynamicFragment");
fragmenttransaction.commit();
fragmentmanager.executePendingTransactions();
p();
r();
I = LuaEvent.getInstance(this);
c();
aa = findViewById(0x7f0a01b9);
k = findViewById(0x7f0a01ba);
}
public static void showAbout(Activity activity) {
FragmentManager fm = activity.getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
Fragment prev = fm.findFragmentByTag(ABOUT_DIALOG_TAG);
if (prev != null) {
ft.remove(prev);
}
ft.addToBackStack(null);
new AboutDialog().show(ft, "about_dialog");
}
@Override
public void destroyItem(ViewGroup viewPager, int position, Object object) {
if (position >= getCount()) {
FragmentManager manager = ((Fragment) object).getFragmentManager();
FragmentTransaction trans = manager.beginTransaction();
trans.remove((Fragment) object);
trans.commit();
}
}
private Fragment getFragment(Class<? extends Fragment> fragClass){
try {
return fragClass.newInstance();
} catch (Exception e) {
Toast.makeText(this, "Error showing " + fragClass.getSimpleName().replace("Fragment", ""), Toast.LENGTH_SHORT).show();
Log.e("DemoScope", "Unable to create Fragment", e);
return null;
}
}
ExecStartFrgmentImpl_JELLY_BEAN(Context context, IBinder contextThread, IBinder token, Fragment fragment, Intent intent,
int requestCode, Bundle options) {
this.who = context;
this.contextThread = contextThread;
this.token = token;
this.target = fragment;
this.intent = intent;
this.requestCode = requestCode;
this.options = options;
}
protected static void refreshSupportAppDevelopmentDialogDonated(final Fragment f) {
if (f != null && f instanceof SupportAppDevelopmentDialogFragment && f.getActivity() != null) {
f.getActivity().runOnUiThread(new Runnable() {
public void run() {
((SupportAppDevelopmentDialogFragment) f).showDonatedInfo();
}
});
}
}
/**
* Start a new fragment.
*
* @param fragment The fragment to start
* @param push If true, the current fragment will be pushed onto the back stack. If false,
* the current fragment will be replaced.
*/
public void startPreferenceFragment(Fragment fragment, boolean push) {
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(com.android.internal.R.id.prefs, fragment);
if (push) {
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.addToBackStack(BACK_STACK_PREFS);
} else {
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
}
transaction.commitAllowingStateLoss();
}
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// Check if the fragment is already initialized
if (mFragment == null) {
// If not, instantiate and add it to the activity
mFragment = Fragment.instantiate(mActivity, mClass.getName());
ft.add(android.R.id.content, mFragment, mTag);
} else {
// If it exists, simply attach it in order to show it
ft.setCustomAnimations(android.R.animator.fade_in,
R.animator.animationtest);
ft.attach(mFragment);
}
}
private void showDialog(final HashMap strings, Object cryptoObject, FingerprintUiHelper.Callback callback) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
// DialogFragment.show() will take care of adding the fragment
// in a transaction. We also want to remove any currently showing
// dialog, so make our own transaction and take care of that here.
Activity activity = getCurrentActivity();
if (activity == null) {
callback.onError(AppConstants.E_INIT_FAILURE,
strings.containsKey("cancelled") ? strings.get("cancelled").toString() : "Authentication was cancelled");
return;
}
FragmentTransaction ft = activity.getFragmentManager().beginTransaction();
Fragment prev = getCurrentActivity().getFragmentManager().findFragmentByTag(AppConstants.DIALOG_FRAGMENT_TAG);
if (prev != null) {
ft.remove(prev);
}
ft.addToBackStack(null);
// Create and show the dialog.
FingerprintAuthenticationDialogFragment newFragment = FingerprintAuthenticationDialogFragment.newInstance(strings);
newFragment.setCryptoObject((FingerprintManager.CryptoObject) cryptoObject);
newFragment.setCallback(callback);
newFragment.show(ft, AppConstants.DIALOG_FRAGMENT_TAG);
}
}
@Override protected Fragment getFragment(int position) {
int stringId = getStringId(position);
if (stringId == R.string.settings) {
return new SettingsFragment();
} else if (stringId == R.string.about) {
return new AboutFragment();
}
return super.getFragment(position);
}
public ActivityResult execStartActivity(Context who, IBinder contextThread, IBinder token,
Fragment target, Intent intent, int requestCode, Bundle options) {
PluginIntentResolver.resolveActivity(intent);
Object result = RefInvoker.invokeMethod(realInstrumention, android.app.Instrumentation.class.getName(),
"execStartActivity", new Class[] { Context.class, IBinder.class, IBinder.class,
Fragment.class, Intent.class, int.class, Bundle.class }, new Object[] { who,
contextThread, token, target, intent, requestCode, options });
return (ActivityResult) result;
}
@Override
public Fragment getItem(int position) {
if (position == 0) {
return new Applications();
} else if (position == 1) {
return new PreventList();
} else {
return null;
}
}
private Fragment getFragmentAt(int position) {
switch (position) {
case TAB_INDEX_DIALER:
return mDialpadFragment;
case TAB_INDEX_CALL_LOG:
return mCallLogFragment;
case TAB_INDEX_FAVORITES:
return mPhoneFavoriteFragment;
default:
throw new IllegalStateException("Unknown fragment index: " + position);
}
}
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
// Do something with the time chosen by the user
alarm.setTime(hourOfDay, minute);
Fragment targetFragment = getTargetFragment();
if (targetFragment != null) {
targetFragment.onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, null);
}
}
/**
* サービスとバインドされたことをを通知します.
*/
private void notifyBindService() {
FragmentManager manager = getFragmentManager();
Fragment f = manager.findFragmentById(R.id.fragment_container);
if (f != null && f instanceof FaBoArduinoFragment) {
((FaBoArduinoFragment) f).onBindService();
}
}
/**
* サービスとアンバインドされたことを通知します.
*/
private void notifyUnbindService() {
FragmentManager manager = getFragmentManager();
Fragment f = manager.findFragmentById(R.id.fragment_container);
if (f != null && f instanceof FaBoArduinoFragment) {
((FaBoArduinoFragment) f).onUnbindService();
}
}
private void sendFragmentVisibilityChange(int position, boolean visibility) {
if (DEBUG) {
Log.d(TAG, "sendFragmentVisibiltyChange(). position: " + position
+ ", visibility: " + visibility);
}
// Position can be -1 initially. See PageChangeListener.
if (position >= 0) {
final Fragment fragment = getFragmentAt(position);
if (fragment != null) {
fragment.setMenuVisibility(visibility);
fragment.setUserVisibleHint(visibility);
}
}
}
private Fragment createActionFragment() {
return new Fragment(){
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_action,container,false);
}
};
}