从另一个片段返回时如何在视图页面中显示片段?
Posted
技术标签:
【中文标题】从另一个片段返回时如何在视图页面中显示片段?【英文标题】:How to show fragments in viewpager when back from another fragment? 【发布时间】:2015-12-21 18:59:39 【问题描述】:我在几个片段中有一个片段是 viewPager,其中每个节目都包含一个 listiview。当我们转到下一个片段时单击任何项目列表视图,但是当下一个片段后退按钮在我的 viewpager 中没有显示任何内容时
public class HomePage extends Fragment
private View view;
private HomeTabsAdapter mAdapter;
private ViewPager mPagerHome;
public PagerSlidingTabStrip mTabs;
private Typeface typeface;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
view = inflater.inflate(R.layout.homepage_fragment, container, false);
mTabs = (PagerSlidingTabStrip) view.findViewById(R.id.TabsHome);
mPagerHome = (ViewPager) view.findViewById(R.id.pagerHome);
ArrayList<String> title = new ArrayList<>();
title.add("خبر داغ");
title.add("اقتصادی");
title.add("بین المللی");
mAdapter = new HomeTabsAdapter(HomePage.this.getFragmentManager(), title);
mPagerHome.setAdapter(mAdapter);
mPagerHome.setCurrentItem(title.size());
mTabs.setViewPager(mPagerHome);
typeface = Typeface.createFromAsset(getActivity().getAssets(),"fonts/IRAN-Sans.ttf");
//jologiri az 3 noghte kardane esme tab ha va font
LinearLayout tabsContainer = (LinearLayout) mTabs.getChildAt(0);
for (int i = 0; i < tabsContainer.getChildCount(); i++)
TextView tab = (TextView) tabsContainer.getChildAt(i);
tab.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f));
tab.setPadding(8, 0, 8, 0);
tab.setTypeface(typeface);
return view;
和我的视图寻呼机适配器
public class HomeTabsAdapter extends FragmentPagerAdapter
public ArrayList<String> mTitle;
public HomeTabsAdapter(FragmentManager fm, ArrayList<String> mTitle)
super(fm);
this.mTitle = mTitle;
@Override
public Fragment getItem(int position)
switch (position)
case 0:
return HotNews.newInstance();
case 1:
return Economic.newInstance();
case 2:
return International.newInstance();
return null;
@Override
public int getCount()
return mTitle.size();
@Override
public CharSequence getPageTitle(int position)
return mTitle.get(position);
和片段之一
public class International extends Fragment
private View view;
private ItemNews itemNews;
private NewsAdapter adapter;
private FloatingActionButton btn;
private ExpandableListView list;
private static final int SCROLL_TO_TOP = -1;
private static final int SCROLL_TO_BOTTOM = 1;
private static final int SCROLL_DIRECTION_CHANGE_THRESHOLD = 5;
private int mScrollDirection = 0;
private ItemChild childItem;
private ArrayList<ItemChild> child;
public static International newInstance()
International international = new International();
return international;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
view = inflater.inflate(R.layout.listnews_fragment, container, false);
list = (ExpandableListView) view.findViewById(R.id.ListNews);
list.setGroupIndicator(null);
String text = " مسی به همراه بارسلونا ۶ بار قهرمان لالیگا، دو بار قهرمان جام حذفی اسپانیا، پنج بار برنده سوپرکاپ اسپانیا، سه بار قهرمان لیگ قهرمانان اروپا، دو بار\n" +
" قهرمان سوپر کاپ اروپا و دو بار قهرمان جام باشگاههای جهان شده است. مسی اولین و تنها بازیکنی است که در چهار رقابت لیگ قهرمانان اروپا به عنوان آ";
child = new ArrayList<>();
for (int i = 0; i <2; i++)
childItem = new ItemChild();
childItem.setId(i);
childItem.setImageChild("http://bit.do/logo00");
childItem.setTitleChild("ورزش سه -");
childItem.setDate("8ساعت قبل");
child.add(childItem);
List<ItemNews> news = new ArrayList<>();
for (int i = 0; i < 10; i++)
itemNews = new ItemNews();
itemNews.setId(i);
itemNews.setmIconSource("http://bit.do/logo00");
itemNews.setmImage("http://bit.do/image00");
itemNews.setmSource("ورزش سه -");
itemNews.setmTime("8ساعت قبل");
itemNews.setmTitle("messi");
itemNews.setmNews(text);
itemNews.setChild(child);
news.add(itemNews);
adapter = new NewsAdapter(International.this, news,getActivity());
list.setAdapter(adapter);
btn = (FloatingActionButton) view.findViewById(R.id.Floating);
list.setOnScrollListener(new AbsListView.OnScrollListener()
int mScrollPosition;
@Override
public void onScrollStateChanged(AbsListView view, int scrollState)
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
View topChild = view.getChildAt(0);
int newScrollPosition = 0;
if (topChild == null)
newScrollPosition = 0;
else
newScrollPosition = -topChild.getTop() + view.getFirstVisiblePosition() * topChild.getHeight();
if (Math.abs(newScrollPosition - mScrollPosition) >= SCROLL_DIRECTION_CHANGE_THRESHOLD)
onScrollPositionChanged(mScrollPosition, newScrollPosition);
mScrollPosition = newScrollPosition;
);
return view;
【问题讨论】:
【参考方案1】:尝试在您的 FragmentActivity
类中实现 onBackPressed()
使用寻呼机getCurrentItem()
.....它肯定会工作:)
【讨论】:
我在 fragment.v4 中的寻呼机和在活动中的片段并且不使用片段活动以上是关于从另一个片段返回时如何在视图页面中显示片段?的主要内容,如果未能解决你的问题,请参考以下文章