【问题标题】:Hide Parent Fragment from the Fragment in the viewPager从 viewPager 中的 Fragment 隐藏父 Fragment
【发布时间】:2015-06-11 22:12:49
【问题描述】:

我有一个片段 A 包含一个视图寻呼机,它显示多个嵌套片段。 B 和 C 是视图分页器直接持有的片段。并且每个 B 和 C 都持有一个 listView。当单击 listView 项目片段 D 将显示。问题是,我只能从 viewPager 中隐藏 Fragment C 和 B,这意味着 Fragment D 将超过 Fragment A。问题是我如何从 B 和 C 中隐藏 Fragment A 而不仅仅是隐藏 Fragment 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" />

任何人都可以帮助我,谢谢! =)

【问题讨论】:

    标签: android listview android-fragments android-viewpager


    【解决方案1】:

    因为B、C都托管在ViewPager中,所以它们都在Fragment A中,所以你只需要找到Fragment A并隐藏即可。

    真正的问题是,id home_frame_content 在哪里。

    如果这个id在Fragment A中,一旦A被隐藏,D就会被隐藏。我想这就是你想要的。

    所以 id home_frame_content 一定是不在 A 中的某个地方。然后你可以找到 A,隐藏它,你会得到你想要的。

    更新 1

    还有一个演示:https://github.com/liaohuqiu/ABCDFragment

    希望对您有所帮助。

    【讨论】:

    • 不错。现在一切正常。感谢您的演示!对我的问题有很大帮助。
    • 也许你想尝试改变:transaction.add(R.id.home_frame_content, dFeedFrag, "dFrag"); -> transaction.replace(R.id.home_frame_content, dFeedFrag, "dFrag");
    • @RichardLIANG,这是有道理的。我已经更新了演示。谢谢。
    猜你喜欢
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    相关资源
    最近更新 更多