在android中动态创建选项卡并使用传入的参数加载片段

Posted

技术标签:

【中文标题】在android中动态创建选项卡并使用传入的参数加载片段【英文标题】:Dynamically create tab in android and load fragment with parameters passed in it 【发布时间】:2021-08-23 07:45:22 【问题描述】:

我想根据数组中给定的网站数量动态创建选项卡。在每次单击选项卡时,我想通过从数组中传递网站的相应 url 来加载一个带有 webview 的片段,其中加载了网站。我也可以在其中实现寻呼机吗?

谢谢


我之前曾在我的代码中发布过帮助请求,或者我可能无法在那里定义我的问题: Dynamically adding tabs in android with webview and fragment

【问题讨论】:

【参考方案1】:

试试这个,我很久以前就做过了,可能有一些错误,但仍然:

在mainactivity中创建片段和url的arraylist:

 ArrayList<Fragment> fragments = new ArrayList<>();
 ArrayList<String> urls =  new ArrayList<>();

现在,当你迭代你的动态数据时,继续添加:

 while(iterator.hasNext()) 
fragments.add(new ftab1());
urls.add(url);

现在设置适配器传递上面两个arraylist:

PagerAdapter pageradapter= new PagerAdapter(getSupportFragmentManager(),getApplicationContext(),fragments,urls);
  pager.setAdapter(pageradapter);

现在来到 PagerAdapter: 创建两个全局变量

ArrayList<Fragment> fragments;
    ArrayList<String> urls;

定义构造函数并初始化以上2个变量:

 public PagerAdapter(FragmentManager fm, Context context, ArrayList<Fragment> fragments,ArrayList<String> urls) 
        super(fm);
        this.context = context;
        this.fragments = fragments;
        this.urls=urls;
    

现在主要功能是 getItem() 将数据包传递给该活动:

 @Override
    public Fragment getItem(int i) 
        Bundle data = new Bundle();
        data.putString("url",urls.get(i));
        fragments.get(i).setArguments(data);
        return fragments.get(i);
    

现在像这样在你的 ftab1 中获取 url:

String url = getArguments().getString("url");

【讨论】:

谢谢。我能够实现所需的功能。但是除了第一个选项卡其他选项卡正在抛出异常“java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'void android.webkit.WebView.loadUrl(java.lang.String)'” @Programmer001 不看你的代码很难说,分享你修改后的ftab1代码 @Programmer001 确保您正在将您的 tablayout 与 viewpager 像这样tabLayout.setupWithViewPager(pager); 链接起来 感谢您的建议。我试过了。问题出在 tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() @Override public void onTabSelected(TabLayout.Tab tab) viewPager.setCurrentItem(tab.getPosition());

以上是关于在android中动态创建选项卡并使用传入的参数加载片段的主要内容,如果未能解决你的问题,请参考以下文章

如何优雅的写UI——添加MFC选项卡

以有效的方式管理android片段创建?

python函数万能参数(动态参数)

Android导航组件:如何保存片段状态

如何使用 Selenium WebDriver 打开一个新选项卡并启动链接?

如何使用 viewpager(android) 创建动态选项卡?