当前位置: 首页 > 知识库问答 >
问题:

使用加载程序API时FragmentStatePagerAdapter未设置UI元素

韩朝斑
2023-03-14

因此,当我尝试使用FragmentStatePagerAdapter和Loader API但UI中没有设置值时,我的意思是当完成onLoadFinished()并将TextView、ImageView和changeCursor的值设置到我的适配器时,它并不反映它,我看到的是我在XML中设置的UI。

让我们看看我能不能把这个问题解释清楚。

我有一个列表,当一个项目是点击将得到一个详细的视图。当一个项目被选中时,两个元素被发送到detail、ids数组和所选项目的位置。

listView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
                Intent intent = new Intent(ActionConstant.DETAIL);

                intent.putExtra("ids", ids);
                intent.putExtra("position", position);
                startActivity(intent);
            }
        });

因此,在DetailActivity中有一个ViewPager,它有一个FragmentStatePagerAdapter,它使用ID和位置加载适当的数据。

@Override
    public void onCreate(Bundle savedIntanceState) {

        super.onCreate(savedIntanceState);
        setContentView(R.layout.detail);
        ids = getIntent().getLongArrayExtra("ids");
        int currentIndex = getIntent().getIntExtra("position",-1);

        mPagerAdapter = new DetailPagerAdapter(getSupportFragmentManager());

        // Set up the ViewPager, attaching the adapter.
        mViewPager = (ViewPager) findViewById(R.id.pager);

        mViewPager.setAdapter(mPagerAdapter);
        mViewPager.setCurrentItem(currentIndex);

    }

并且DetailPagerAdapter重写getItem和getCount(返回IDS.Length)

        @Override
        public Fragment getItem(int i) {
            return DetailFragment.newInstance(ids[i]);
        }

现在,在DetailFragment中,newInstance执行以下操作

公共静态DetailFragment newInstance(长id){DetailFragment f=new DetailFragment();

    // Supply num input as an argument.
    Bundle args = new Bundle();
    args.putLong("_id", id);
    f.setArguments(args);

    return f;
}

以及何时调用onLoadFinished。

@Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {

        if (loader.getId() == 1)
            adapter.changeCursor(cursor);
        else if (loader.getId() == 2) {
            if (!cursor.moveToNext())
                return;

            textName.setText(cursor.getString(cursor.getColumnIndexOrThrow(TraderColumns.NAME)));


    }
}

共有1个答案

葛炜
2023-03-14

Eureka,我在我的onResume()中看到的片段中所发生的事情是相当琐碎的,而且很有意义

getActivity().getSupportLoaderManager().restartLoader(CONTACT_REQUEST, null, this);

getActivity().getSupportLoaderManager().restartLoader(TRADER_DETAIL_REQUEST, null, this);

因此,这将使用activity的supportLoader管理器,因为这是一个实例,它把我所有的视图都搞乱了。相反,我使用:

getLoaderManager()。RestartLoader(CONTACT_REQUEST,null,this);

getLoaderManager()。RestartLoader(TRADER_DETAIL_REQUEST,null,this);

 类似资料:
  • 嗨,我正在使用springboot 1.5.3。大摇大摆地释放。当我运行应用程序时,我可以通过访问“localhost:3030/v2/api文档”来访问json swagger响应。但我无法访问“localhost:3030/swagger ui.html”,同时显示未找到“/swagger ui.html”的映射。我如何解决这个问题。 依赖关系 招摇过市配置

  • 问题内容: 我在AngularJS项目的Date From和Date To字段上使用JQuery UI的Datepicker。我添加了将值绑定到模型值的指令,还添加了对OnSelect的检查,该检查为每个字段设置minDate和maxDate选项(因此Date To永远不会早于Date From)。问题在于,在加载页面时,实际上没有选择任何日期(即使模型具有值),因此仍然可以选择早于“日期自”的“

  • 问题内容: 我是AngularJS新手。我想创建网格(使用ng-grid),其高度取决于窗口高度,即。 我已经写了指令: 当我调整浏览器窗口的大小但在第一次加载网站时未应用样式时,此方法效果很好。我可以在哪里放置代码以初始化身高? 问题答案: 我在为自己寻找解决同一问题的方法时遇到了您的帖子。我使用了基于多个帖子的指令来组合以下解决方案。您可以在这里尝试(尝试调整浏览器窗口的大小):http: /

  • 我正试图用PhpUnit和Composer。为此,我做了: 1添加phpUnit到req作曲家部分: 2.根据需要安装: php编写器。phar安装--dev 手术成功结束。 安装phpunit/phpunit(3.7.6)下载:100% 不幸的是,当我想做测试时,我得到了 ./vendor/bin/phpunit PHP致命错误:对/home/serek/PHP/project/tests/bo

  • 我的React客户端的Dockerfile: 我的Express后端的Dockerfile: 我的码头工人。项目根目录中的yml文件: 我的服务器。我的后端文件夹下的js文件: 当我跑的时候: 我得到以下输出在我的终端: 我的后端以代码0退出,我无法加载我的应用程序。我的后端正在运行。 我做错了什么,如何让我的React-Express Node应用程序与Docker Comment一起运行?

  • 我正在使用JavaFX WebView加载网站。该网站正在使用iframes。 它在经典浏览器上运行良好,但当我使用JavaFX WebView显示页面时,框架是空的。 我试图从Java代码中以编程方式显示iframe的内容(根据本文:如何通过javafx webview获取iframe加载页面的内容?)。它是空的。 我还尝试在客户端使用内容安全策略、X-Frame-Options等(通过覆盖HT