片段隐藏并在点击时显示

时间:2016-12-13 08:08:48

标签: android android-fragments android-recyclerview fragmenttransaction fragmentmanager

我有一个需要从活动中不断更新的片段,我只想在点击按钮时显示这个片段,点击相同的按钮片段应该被隐藏但仍然是活动的,所以我可以更新活动中片段的内容(片段包含回收者视图)。 在隐藏和显示此片段时,我想为该事务设置动画。

**

工作代码

**

活动XML(包含片段的框架布局)

<FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

    <fragment
            android:name="octave.foodster.fragment_cart"
            android:id="@+id/fragment_cart"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

</FrameLayout>

活动中的java代码(我现在删除了动画)

        @Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            finish();
            return true;
        case R.id.cart:
            Log.i("click", "menu");

            showHideFragment(fragment);
            break;
    }
    return super.onOptionsItemSelected(item);
}

public void showHideFragment(final Fragment fragment) {

    final FragmentTransaction fragTransaction = getSupportFragmentManager().beginTransaction();
    fragTransaction.setCustomAnimations(R.anim.fragment_slide_from_right, R.anim.animation_leave);

    if (fragment.isHidden()) {
        fragTransaction.show(fragment);
        Log.d("hidden", "Show");
    } else {
        fragTransaction.hide(fragment);
        Log.d("Shown", "Hide");
    }

    fragTransaction.commit();
}

在onCreate()活动中 - 这样做是为了默认隐藏片段

fragmentManager = getSupportFragmentManager();
    fragment = fragmentManager.findFragmentById(R.id.fragment_cart);
    final FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
    fragmentTransaction.hide(fragment);
    fragmentTransaction.commit();

2 个答案:

答案 0 :(得分:3)

在onClick函数中执行此功能,以便在单击按钮时显示片段隐藏

// Call this function inside onClick of button

public void showHideFragment(final Fragment fragment){

    FragmentTransaction fragTransaction = getFragmentManager().beginTransaction();
    fragTransaction.setCustomAnimations(android.R.animator.fade_in,
                    android.R.animator.fade_out);

    if (fragment.isHidden()) {
        fragTransaction.show(fragment);
        Log.d("hidden","Show");
    } else {
        fragTransaction.hide(fragment);
        Log.d("Shown","Hide");                        
    }

    fragTransaction.commit();
}

答案 1 :(得分:1)

我希望这个链接可以帮到你!! Demonstration of hiding and showing fragments