在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中动态创建选项卡并使用传入的参数加载片段的主要内容,如果未能解决你的问题,请参考以下文章