android - 在 Activity 中查找 fragment View 。 Android findFragmentByTag(String tag) 返回 null

标签 android view android-activity spinner fragment

我正在尝试从添加到我的 Activity 中的 Fragment 获取 Spinner View,但似乎我无法获取 fragment 或 View 。

我有一个 Activity,它向它的 LinearLayout 添加了一个 Fragment, fragment 的布局基于来自 Activity Intent 的“额外”。一切都正确显示,我可以看到 fragment 的所有 View ,但由于某种原因,当我调用 findFragmentByTag(String tag) 时它返回 null,因此我无法调用 getView()。

下面是我如何将 fragment 代码添加到我的 Activity 中:

...onCreate(){
    ...
    FragmentManager fm = getFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();

    Fragment fr = new Fragment(){
        @Override
        public View onCreateView(LayoutInflater inflater,
                ViewGroup container, Bundle savedInstanceState) {
            return inflater.inflate(layoutID, container, false);
        }
    };
    ft.add(R.id.formsListActivity_Container, fr, "form_fragment_tag");

    ft.commit();
    ...

然后我尝试获取这样的 fragment 并获取微调器 View 以添加字符串数组:

Fragment f = fm.findFragmentByTag("form_fragment_tag");
Spinner spinner = (Spinner) f.getView().findViewById(R.id.city_spinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, 
        R.array.city_list, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);

但是我得到一个 null 异常,因为 findFragmentByTag() 返回 null

我做错了什么?我已经验证了几次代码,标签是一样的。 我还确保微调器的 id 正确地位于 XML 布局文件中,并且 fragment 正在加载正确的 XML 布局,因为我可以看到它(如果评论从 fragment 部分获取 View )。

最佳答案

我已经解决了这个问题,似乎根据 Activity 和 fragment 的生命周期,在 onCreate() 中执行 findFragmentById() 时, fragment 还没有“实际创建”,我测试了这是通过向布局添加一个简单的按钮并制作一种方法,当单击该按钮时,微调器将填充数据。

但是我当然不希望用户单击“加载”按钮来填充微调器,而是在我的 fragment 上实现了 public void onActivityCreated() 方法。

这里是我的 fragment 代码供引用:

 Fragment fr = new Fragment(){

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(layoutID, container, false);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Spinner spinner = (Spinner) this.getView().findViewById(R.id.city_spinner);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(context, R.array.city_list, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
    }

 };

关于android - 在 Activity 中查找 fragment View 。 Android findFragmentByTag(String tag) 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9966928/

相关文章:

java - Android PixelXorXfermode 已弃用

Android Studio Bumblebee 2021.1.1 Canary 4 Emulator 无法在 m1 上运行

android - 如何检查我的 ListView 何时完成重绘?

android - bouncycaSTLe 连接到 android studio

grails - 如何从 Controller 传递变量的值以查看grails?

android - 什么 logcat 消息 : "E/MoreInfoHPW_ViewGroup(2905): Parent view is not a TextView" means?

java - 有哪些方法可以以编程方式检测 Android 操作系统中的漏洞?

sql - (Oracle性能)基于 View 的查询会使用where子句限制 View 吗?

android - 按下主页按钮时如何完成() Activity

android - 如何在不暂停的情况下将 Activity move 到android中的后台?