【问题标题】:Fragment Hide and show on click片段隐藏和点击显示
【发布时间】:2016-12-13 08:08:47
【问题描述】:

我有一个片段需要从活动中不断更新,我只想在单击按钮时显示此片段,单击同一个按钮时,片段应该被隐藏但仍然处于活动状态,因此我可以更新来自活动的片段的内容(片段包含一个回收器视图)。 在隐藏和显示此片段时,我想为交易制作动画。

**

工作代码

**

Activity 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>

activity中的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();

【问题讨论】:

  • 或许你可以试试对话片段

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


【解决方案1】:

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();
}

【讨论】:

  • 如果您还可以为活动提供 XML(我应该使用片段还是框架布局?)以及片段的初始化,那就太好了。
  • 使用片段。您必须已经定义它。在活动或另一个片段中定义片段和按钮时,照常使用它。我相信任何一种方式都有效
  • 你也可以参考这个链接:coderzheaven.com/2013/06/05/…
  • 我更新了问题以添加我当前的代码,它几乎就在那里,但默认情况下片段是可见的。我怎样才能默认隐藏?
  • 使用标志并定义 fragTransaction.hide(fragment);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-10
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 1970-01-01
相关资源
最近更新 更多