从 viewPager 中的片段隐藏父片段
Hide Parent Fragment from the Fragment in the viewPager
我有一个片段 A 包含一个显示多个嵌套片段的视图寻呼机。 B 和 C 是视图分页器直接持有的片段。而B和C各持有一个listView。单击 listView 项目片段 D 时将显示。问题是,我只能从 viewPager 中隐藏片段 C 和 B,这意味着片段 D 将覆盖片段 A。问题是我如何从 B 和 C 中隐藏片段 A 而不仅仅是从中隐藏片段 B 和 C viewPager.
这里是片段A的代码
public class FragmentA extends Fragment {
private View view;
private PagerSlidingTabStrip tabs;
private DisplayMetrics dm;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_a, null);
dm = getResources().getDisplayMetrics();
ViewPager pager = (ViewPager) view.findViewById(R.id.pager);
tabs = (PagerSlidingTabStrip) view.findViewById(R.id.tabs);
pager.setAdapter(new MyPagerAdapter(getChildFragmentManager()));
tabs.setViewPager(pager);
setTabsValue();
initView();
return view;
}
private void initView() {
TextView titleView = (TextView) view.findViewById(R.id.title_content_text);
titleView.setVisibility(View.VISIBLE);
titleView.setText(getString(R.string.label_alert));
}
public class MyPagerAdapter extends FragmentPagerAdapter {
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
private final String[] titles = { "B", "C" };
@Override
public CharSequence getPageTitle(int position) {
return titles[position];
}
@Override
public int getCount() {
return titles.length;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
if (BFrag == null) {
BFrag = new BFrag();
}
return BFrag;
case 1:
if (CFrag == null) {
CFrag = new CFrag();
}
return CFrag;
default:
return null;
}
}
}
}
这是片段 B 中试图显示片段 D 的代码:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> list, View v, int pos, long id) {
if (pos < Item.size()) {
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
transaction.hide(BFrag.this);
DFrag dFrag = new DFrag();
activity.dFeedFrag = dFrag;
transaction.add(R.id.home_frame_content, dFeedFrag, "dFrag");
transaction.addToBackStack(null);
transaction.commit();
}
}
}
});
Fragment A的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<include layout="@layout/inculde_title_bar"/>
<com.example.blah.PagerSlidingTabStrip
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="40dp" />
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/tabs" />
谁能帮帮我,谢谢! =)
因为B、C是托管在ViewPager中的,所以它们在片段A中,所以你只需要找到片段A并隐藏它就可以了。
真正的问题是,id home_frame_content
。
如果这个id在Fragment A中,A隐藏后D也会隐藏。我想这就是你想要的。
所以这个idhome_frame_content
肯定不在A的某个地方。然后你可以找到A,把它藏起来,你会得到你想要的。
更新 1
并且有一个演示:https://github.com/liaohuqiu/ABCDFragment
希望对您有所帮助。
我有一个片段 A 包含一个显示多个嵌套片段的视图寻呼机。 B 和 C 是视图分页器直接持有的片段。而B和C各持有一个listView。单击 listView 项目片段 D 时将显示。问题是,我只能从 viewPager 中隐藏片段 C 和 B,这意味着片段 D 将覆盖片段 A。问题是我如何从 B 和 C 中隐藏片段 A 而不仅仅是从中隐藏片段 B 和 C viewPager.
这里是片段A的代码
public class FragmentA extends Fragment {
private View view;
private PagerSlidingTabStrip tabs;
private DisplayMetrics dm;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_a, null);
dm = getResources().getDisplayMetrics();
ViewPager pager = (ViewPager) view.findViewById(R.id.pager);
tabs = (PagerSlidingTabStrip) view.findViewById(R.id.tabs);
pager.setAdapter(new MyPagerAdapter(getChildFragmentManager()));
tabs.setViewPager(pager);
setTabsValue();
initView();
return view;
}
private void initView() {
TextView titleView = (TextView) view.findViewById(R.id.title_content_text);
titleView.setVisibility(View.VISIBLE);
titleView.setText(getString(R.string.label_alert));
}
public class MyPagerAdapter extends FragmentPagerAdapter {
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
private final String[] titles = { "B", "C" };
@Override
public CharSequence getPageTitle(int position) {
return titles[position];
}
@Override
public int getCount() {
return titles.length;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
if (BFrag == null) {
BFrag = new BFrag();
}
return BFrag;
case 1:
if (CFrag == null) {
CFrag = new CFrag();
}
return CFrag;
default:
return null;
}
}
}
}
这是片段 B 中试图显示片段 D 的代码:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> list, View v, int pos, long id) {
if (pos < Item.size()) {
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
transaction.hide(BFrag.this);
DFrag dFrag = new DFrag();
activity.dFeedFrag = dFrag;
transaction.add(R.id.home_frame_content, dFeedFrag, "dFrag");
transaction.addToBackStack(null);
transaction.commit();
}
}
}
});
Fragment A的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<include layout="@layout/inculde_title_bar"/>
<com.example.blah.PagerSlidingTabStrip
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="40dp" />
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/tabs" />
谁能帮帮我,谢谢! =)
因为B、C是托管在ViewPager中的,所以它们在片段A中,所以你只需要找到片段A并隐藏它就可以了。
真正的问题是,id home_frame_content
。
如果这个id在Fragment A中,A隐藏后D也会隐藏。我想这就是你想要的。
所以这个idhome_frame_content
肯定不在A的某个地方。然后你可以找到A,把它藏起来,你会得到你想要的。
更新 1
并且有一个演示:https://github.com/liaohuqiu/ABCDFragment
希望对您有所帮助。