MainActivity仍然可以通过片段查看

时间:2016-10-01 23:59:06

标签: java android android-fragments fragment

当我启动一个片段时,我的主要类中的视图仍然是可见的,因此按钮在整个程序中显示...我想知道这个问题最简单的解决方案是什么。我是否需要为两个按钮创建一个片段,然后从包含按钮的片段中启动另一个片段?有没有办法在显示片段时隐藏主类的视图?我非常感谢任何提示,我一直在寻找解决方案。

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
     Arrays.sort(lContacts,Contact.ContactNameComparator);

    for(int i = 0; i< lContacts.length;i++){
        mLnames[i] = lContacts[i].getLname();

    }
    mQuoteArray = getResources().getStringArray(R.array.Quotes);

    setContentView(R.layout.activity_main);

    btnnames = (Button) findViewById(R.id.btnlaunch);
    btndepartments = (Button) findViewById(R.id.btndepartments);
    btnnames.setOnClickListener(myhandler1);
    btndepartments.setOnClickListener(myhandler2);

    mTitleFrameLayout = (FrameLayout) findViewById(R.id.title_fragment_container);
    mQuotesFrameLayout = (FrameLayout) findViewById(R.id.quote_fragment_container);


    mFragmentManager = getFragmentManager();
     fragmentTransaction = mFragmentManager
            .beginTransaction();

    mFragmentManager
            .addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
                public void onBackStackChanged() {
                    setLayout();
                }
            });

}

View.OnClickListener myhandler1 = new View.OnClickListener() {
    public void onClick(View v) {
        mFragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = mFragmentManager
                .beginTransaction();
        fragmentTransaction.add(R.id.title_fragment_container,
                new TitlesFragment());
        fragmentTransaction.commit();


    }

};

View.OnClickListener myhandler2 = new View.OnClickListener() {
    public void onClick(View v) {

    }

};

private void setLayout() {
    if (!mQuoteFragment.isAdded()) {
        mTitleFrameLayout.setLayoutParams(new LinearLayout.LayoutParams(
                MATCH_PARENT, MATCH_PARENT)); // width, height
        mQuotesFrameLayout.setLayoutParams(new LinearLayout.LayoutParams(0,
                MATCH_PARENT));
    } else {
        mTitleFrameLayout.setLayoutParams(new LinearLayout.LayoutParams(0,
                MATCH_PARENT, 1f)); // width, height, weight
        mQuotesFrameLayout.setLayoutParams(new LinearLayout.LayoutParams(0,
                MATCH_PARENT, 2f));
    }
}



@Override
public void onListSelection(int index) {
    if (!mQuoteFragment.isAdded()) {
        FragmentTransaction fragmentTransaction = mFragmentManager
                .beginTransaction();
        fragmentTransaction.add(R.id.quote_fragment_container,
                mQuoteFragment);
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();
        mFragmentManager.executePendingTransactions();
    }
    if (mQuoteFragment.getShownIndex() != index) {
        mQuoteFragment.showIndex(index);
    }
}

1 个答案:

答案 0 :(得分:0)

我认为如果要将视图及其附带的操作添加到活动中,则应使用Fragment。所以我不认为你可以隐藏活动视图,或者至少我不认为这是一个很好的编程实践。因此,有两种解决方案可以解决这个问题:

  1. 将您现在拥有的片段制作成另一个活动

  2. 使活动(主类)视图为空并且有两个片段:您现在拥有的片段和另一个片段,其中包含活动视图及其侦听器和操作。这样,如果要切换到其他Fragment,只需要隐藏主类视图片段。

  3. 我希望这是有道理的。