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

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

谢谢


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

【问题讨论】:

    标签: android android-fragments android-viewpager android-webview android-tablayout


    【解决方案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()); }
    猜你喜欢
    • 2013-11-15
    • 1970-01-01
    • 2023-04-02
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多