[英]How to set the titles in a ViewPager PagerTitleStrip instantly
我知道我可以重寫FragmentPagerAdapter
的getPageTitle()
方法:
@Override
public CharSequence getPageTitle(int position) {
return "myTitle";
}
...但是我想更改為CursorLoader
回調上的頁面標題:
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
// How to set the page title here? I miss something like:
// mPagerTitleStrip.setTitle(1, "My Title");
// or: mFragmentPagerAdapter.setTitle(1, "My Title");
}
在FragmentPagerAdapter
創建自己的setTitle
方法。 這是一個例子:
FragmentPagerAdapter
public class PagerAdapter extends FragmentPagerAdapter {
/** A @ {@link List} of each {@link Fragment} displayed */
private final List<Fragment> mFragments = new ArrayList<Fragment>();
/** The titles for the underlying {@link PagerTitleStrip} */
private final List<String> mTitles = new ArrayList<String>();
/**
* Constructor for <code>PagerAdapter</code>
*
* @param fm The {@link FragmentManager} to use
*/
public PagerAdapter(FragmentManager fm) {
super(fm);
}
/**
* {@inheritDoc}
*/
@Override
public Fragment getItem(int position) {
return mFragments.get(position);
}
/**
* {@inheritDoc}
*/
@Override
public int getCount() {
return mFragments.size();
}
/**
* {@inheritDoc}
*/
@Override
public CharSequence getPageTitle(int position) {
return mTitles.get(position);
}
/**
* Adds a new {@link Fragment} and title to the adapter
*
* @param fragment The {@link Fragment} to add
* @param title The title for the {@link Fragment}
*/
public void add(Fragment fragment, String title) {
mFragments.add(fragment);
mTitles.add(title);
notifyDataSetChanged();
}
/**
* Removes each {@link Fragment} from the adapter
*/
public void clear() {
mFragments.clear();
mTitles.clear();
notifyDataSetChanged();
}
}
LoaderCallback
private PagerAdapter mAdapter;
/**
* {@inheritDoc}
*/
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
final Uri uri = Audio.Artists.EXTERNAL_CONTENT_URI;
final String[] projection = new String[] {
BaseColumns._ID, ArtistColumns.ARTIST
};
return new CursorLoader(this, uri, projection, null, null, null);
}
/**
* {@inheritDoc}
*/
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
while (data != null && data.moveToNext()) {
final String artist = data.getString(1);
mAdapter.add(new DummyFragment(), artist);
}
}
/**
* {@inheritDoc}
*/
@Override
public void onLoaderReset(Loader<Cursor> loader) {
mAdapter.clear();
}
我正在使用的DummyFragment
只是FrameLayout
。
那是一種方式,另一種方式是使用Fragment.getArguments
。 像這樣:
FragmentPagerAdapter
/**
* {@inheritDoc}
*/
@Override
public CharSequence getPageTitle(int position) {
return getItem(position).getArguments().getString("your_key");
}
LoaderCallback
/**
* {@inheritDoc}
*/
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
while (data != null && data.moveToNext()) {
final String artist = data.getString(1);
final Bundle args = new Bundle();
args.putString("your_key", artist);
final DummyFragment fragment = new DummyFragment();
fragment.setArguments(args);
mAdapter.add(fragment);
}
}
所以,有一些,但是實際上您所需要的只是對PagerAdapter.getPageTitle
某種回調。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.