gpt4 book ai didi

android - fragment 显示/隐藏根本不起作用

转载 作者:行者123 更新时间:2023-11-30 02:46:44 33 4
gpt4 key购买 nike

为了理解 fragment 背后的基本概念,我一直在尝试构建一个 Android 应用程序。但我完全无法显示和隐藏 fragment 。
这是我的 onClickListner 代码

final FragmentManager fragmentManager = getFragmentManager();

b.setOnClickListener(new View.OnClickListener() {

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public void onClick(View v) {
FragmentTransaction ft = fragmentManager.beginTransaction();

PM_Fragment pm_fragment = new PM_Fragment();
ft.replace(android.R.id.content, pm_fragment);

if (pm_fragment.isHidden()) {
fragmentManager.beginTransaction()
.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out)
.show(pm_fragment)
.commit();

b.setText("Hide");
} else {
fragmentManager.beginTransaction()
.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out)
.hide(pm_fragment)
.commit();
b.setText("Show");
}
}
});

fragment 在我的例子中只是一个文本行。该按钮应该做的是切换 fragment 的可见性。谁能告诉我这段代码有什么问题吗?
不工作,我的意思是该按钮在点击时什么都不做,除了将其文本从“隐藏”更改为“显示”,然后无论您点击多少次,它都会保持“显示”。而这个过程对 fragment 的行为完全没有影响。

最佳答案

我真的不明白你想在这里做什么,但你从来没有提交ft所以你的Fragment从未添加到 Activity .我也不明白这两个内部FragmentTransaction的目的,但可以肯定的是,您不需要根本不需要它们...

全局定义:

private PM_Fragment pmFragment = new PM_Fragment();

还有你的OnClickListener应该是这样的:

b.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out);

if(pmFragment.isAdded()) {
ft.remove(pmFragment);
} else {
ft.replace(android.R.id.content, pmFragment);
}

ft.commit();
}
});

重要:对于 FragmentTransactions上类,Fragment必须在代码中添加!如果您在 XML 中添加它们,则它们不会受到 FragmentTransactions 的影响。 !所以如果添加你的 Fragment像这样:

<fragment
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="at.example.fragments.SomeFragment" />

或者使用其他一些类似的方法,我确信这至少是问题的一部分。您需要添加您的 Fragment仅在这样的代码中:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

if (savedInstanceState == null) {
SomeFragment fragment = SomeFragment.newInstance();

FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.flFragmentContainer, fragment);
transaction.commit();
}
}

只需替换 <fragment />在布局中使用类似这样的标记:

<FrameLayout 
android:id="@+id/flFragmentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent" />

它将作为 Fragment 的容器你想添加。您可以使用 FragmentTransaction在上面添加 Fragment对此FrameLayout .

关于android - fragment 显示/隐藏根本不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24881715/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com