java - Android Studio - 如何检查 fragment 是否膨胀

标签 java android android-fragments

在我的 Android Studio 项目中,我有一个 TabView 作为抽屉导航 Activity 的 fragment 。

fragment :

public class TabView extends Fragment {

View inflatedView;
TextView tvBalance;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    inflatedView = inflater.inflate(R.layout.delivery, container, false);
    getActivity().setTitle("TabView");

    TabLayout tabLayout = (TabLayout) inflatedView.findViewById(R.id.tabLayout);
    tabLayout.addTab(tabLayout.newTab().setText("Tab_1"));
    tabLayout.addTab(tabLayout.newTab().setText("Tab_2"));
    tabLayout.addTab(tabLayout.newTab().setText("Tab_3"));
    final ViewPager viewPager = (ViewPager) inflatedView.findViewById(R.id.viewpager);

    viewPager.setAdapter(new PagerAdapter
            (getFragmentManager(), tabLayout.getTabCount()));
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });

    return inflatedView;
}

public void updateBalance(String balance) {
    if (inflatedView != null) {
        tvBalance = inflatedView.findViewById(R.id.tvBalance);
        tvBalance.setText("$" + balance);
    }
    Log.d("updateBalance", balance);
}

每次值发生变化时,都会在我的 MainActivity 中调用 UpdateBalance 方法。这很有效,因为 Log.d(...) 在正确的时间打印正确的值。

不知何故,尽管 fragment 显示在屏幕上,但 Textfield 不会改变,因为 if (inflatedView != null) 永远不会为 true。

为什么inflatedView总是为空以及如何避免这个问题?

最佳答案

我在放置 fragment 时使用TAGS,然后使用findFragmentByTag来测试 fragment 是否膨胀...例如:

// Loading the fragment with a tag:
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content, new HomeFragment(), "HOME_FRAGMENT");
ft.commit();

// then later check if the fragment is there:
HomeFragment fHome = (HomeFragment) getSupportFragmentManager().findFragmentByTag("HOME_FRAGMENT");

if (fHome != null && fHome.isVisible())
{
    // my fragment is inflated and visible
}

关于java - Android Studio - 如何检查 fragment 是否膨胀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48528428/

相关文章:

java - 从 fragment 访问主要 Activity View

android - 在 ListView 中看不到 TextView

java - 对象映射字段

Android: Intent 的 setFlags 和 addFlags 有什么区别

android - 你如何防止安卓屏幕向侧面转动?

java - 使用 getter 方法检索到的 boolean 值填充 TextView

android - 如何从主视图访问 map fragment

java - android中以不同格式显示具有一个字符串值的日期的问题

java - 将类从 Maven 依赖项加载到我的 ClassLoader

java - 使用 XPath 和 XML XPath Api 获取 Soap Body