在我的 main.xml 布局中,我有一个<FrameLayout>
元素,它是片段占位符:
main.xml中:
<FrameLayout
android:id="@+id/fragment_placeholder"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
我将片段以编程方式添加到上述<FrameLayout>
中:
fragmentTransaction.add(R.id.fragment_placeholder, fragment, null);
然后我可以使用replace()
更改为其他片段:
fragmentTransaction.replace(R.id.fragment_placeholder, otherFragment, null);
在我的项目的某个时刻,我需要获取当前显示片段,并禁用视图上的所有内容。我首先通过以下方式成功获得当前显示的片段:
Fragment currentFragment = fragmentManager.findFragmentById(R.id.fragment_placeholder);
然后,如何禁用片段视图?在视图上,可能有按钮,是否可以禁用整个视图?如果不可能,我如何在视图上添加叠加层?
我试过了:
currentFragment.getView().setEnabled(false);
但是,它不起作用,我仍然可以点击视图上的按钮。
答案 0 :(得分:9)
根据@ Georgy的评论,这里是Disable the touch events for all the views答案的副本(归功于@peceps)。
以下是禁用某些视图组的所有子视图的功能:
/**
* Enables/Disables all child views in a view group.
*
* @param viewGroup the view group
* @param enabled <code>true</code> to enable, <code>false</code> to disable
* the views.
*/
public static void enableDisableViewGroup(ViewGroup viewGroup, boolean enabled) {
int childCount = viewGroup.getChildCount();
for (int i = 0; i < childCount; i++) {
View view = viewGroup.getChildAt(i);
view.setEnabled(enabled);
if (view instanceof ViewGroup) {
enableDisableViewGroup((ViewGroup) view, enabled);
}
}
}
您可以在Fragment
检索到的Fragment.getView()
视图中调用此传递。假设您的片段视图是ViewGroup
。
答案 1 :(得分:0)
这是带有@Marcel建议的Kotlin实现。
fun ViewGroup.enableDisableViewGroup(enabled: Boolean, affectedViews: MutableList<View>) {
for (i in 0 until childCount) {
val view = getChildAt(i)
if (view.isEnabled != enabled) {
view.isEnabled = enabled
affectedViews.add(view)
}
(view as? ViewGroup)?.enableDisableViewGroup(enabled, affectedViews)
}
}
fun MutableList<View>.restoreStateAndClear(enabled: Boolean) {
forEach { view -> view.isEnabled = enabled }
clear()
}