【发布时间】:2018-06-18 03:08:42
【问题描述】:
我有一个活动,其唯一目的是在框架布局中显示 5 个不同的片段。共有 5 个按钮,每个按钮对应于可以在框架布局中显示的 5 个片段之一。
我正在尝试使活动不会响应按下与 SAME 片段对应的按钮的按钮,从而不会执行动画或其他不必要的计算。
问题在于 findFragmentById 和 findFragmentByTag 都返回 null,即使 我相信我传递了 container view 的正确参数,即框架布局。
这是我在响应按钮按下时动态切换片段的方式:
private void viewProfile(){
profile_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Fragment profile = new ProfileFragment();
beginFragment(profile, "profile");
}
});
}
private void beginFragment(Fragment fragment, String tag) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.setCustomAnimations(android.R.animator.fade_in,
android.R.animator.fade_out);
fragmentTransaction.replace(R.id.fragment_display, fragment, tag);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
这是我尝试确定容器中显示的片段的方法:
private void launchEvents(){
final Fragment current_frag = getSupportFragmentManager()
.findFragmentById(R.id.fragment_display);
events_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!current_frag.getTag().equals("events")) {
Fragment events = new EventsFragment();
beginFragment(events, "events");
events.setArguments(location_info);
}
}
});
}
这是我的 XML 文件,以防我在布局层次结构中遇到问题:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/home_screen"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#323272"
tools:context=".HomeScreen">
<FrameLayout
android:id="@+id/fragment_display"
android:layout_width="match_parent"
android:layout_height="527dp"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
tools:background="#323272:color/background_dark">
</FrameLayout>
任何朝着正确方向轻推都会很棒!我为被困在如此微不足道的事情上而感到很愚蠢。
【问题讨论】:
-
您的代码不完整。目前尚不清楚您是否在尝试通过
fragmentTransaction.replace(R.id.fragment_display, fragment, tag);替换片段之前创建并附加了片段此外,您的 xml 不包含片段定义(请参阅此处的 xml:developer.android.com/training/basics/fragments/creating)。请注意,在您的代码中,您试图通过 id 检索片段,但 id 属于 FrameLayout 元素?考虑先查看一些示例以了解核心概念。
标签: android xml android-fragments fragmenttransaction fragmentmanager