Android:动态视图寻呼机只显示第一个片段中的更改

Android:动态视图寻呼机只显示第一个片段中的更改,android,android-fragments,android-viewpager,android-tablayout,Android,Android Fragments,Android Viewpager,Android Tablayout,我对android非常陌生,我正在尝试的是动态创建滑动选项卡,并将可滑动页面(即片段)添加到查看页面。 我看了一些教程并尝试了一些东西。 我正在粘贴下面相同的代码 这是我正在添加到viewpager的片段类 这是一个主要的片段,其中包含选项卡和一个viewpager 在前面的活动中,我使用异步任务从服务器检索json数组数据,并在构造函数中以字符串的形式将其传递给此fragement 适配器用标题填充选项卡,并从片段类的自定义构造函数中创建的片段列表中获取项目。我还了解到,使用自定义构造函数不是

我对android非常陌生,我正在尝试的是动态创建滑动选项卡,并将可滑动页面(即片段)添加到查看页面。 我看了一些教程并尝试了一些东西。 我正在粘贴下面相同的代码

这是我正在添加到viewpager的片段类

这是一个主要的片段,其中包含选项卡和一个viewpager

在前面的活动中,我使用异步任务从服务器检索json数组数据,并在构造函数中以字符串的形式将其传递给此fragement

适配器用标题填充选项卡,并从片段类的自定义构造函数中创建的片段列表中获取项目。我还了解到,使用自定义构造函数不是一个好的实践,我将实现用于相同目的的接口,但这不是这里的主要问题

问题

如果你看到,我正在将类别id传递给viewpager的每个片段,它应该在每个片段中设置相应的类别,但这里发生的事情只是在第一个片段中设置id或将其称为第一个选项卡。其余所有片段只显示文本类别id,而不是在我滑动到第二个片段时要设置的类别fragement第二个片段的类别id在第一个片段中设置,当我滑动到第三个片段时,第三个片段的类别id设置为第一个

所以基本上所有的动作都发生在第一个片段中,而不是全部

请问我哪里错了?
我需要添加动态页面,因为类别的数量每次都在变化,因此应将页面的数量添加到查看页面,并在每个页面中加载与该页面的类别id对应的列表。

在子列表片段中,尝试将代码从onActivityCreated移动到onCreateView。结果应该如下所示:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View inflatedView = inflater.inflate(R.layout.sub_list_fragment, container, false);
    ((TextView) inflatedView.findViewById(R.id.cat)).setText(category);
}

onActivityCreated可能只被调用一次,而onCreateView将在每次在viewpager中创建新片段时被调用。

@Haslam让我试试
public class LATEST_NEWSLETTERS extends android.support.v4.app.Fragment {


    MaterialTabs subTabs;
    ViewPager subPager;
    private String[] titles = new String[]{"Weekly Newsletter", "Market News & Updates", "Day Trade Flash News"};
    ArrayList<String> headers,header_colors,category_ids;
    List<Fragment> fList;
    public LATEST_NEWSLETTERS()
    {

    }

    public LATEST_NEWSLETTERS(String categoryData)
    {
        try
        {
            JSONObject object=new JSONObject(categoryData);
            JSONArray array=object.getJSONArray("categories");
            headers=new ArrayList<>();
            header_colors=new ArrayList<>();
            category_ids=new ArrayList<>();
            fList = new ArrayList<Fragment>();

            for(int i=0;i<array.length();i++)
            {
                object=array.getJSONObject(i);
                headers.add(object.getString("name"));
                header_colors.add(object.getString("bgcolor"));
                category_ids.add(object.getString("cat_id"));
                fList.add(SUB_LIST_FRAGMENT.newInstance(object.getString("cat_id")));
            }
        }
        catch (JSONException e)
        {
            e.printStackTrace();
        }

    }

    void setupTabs()
    {
        subTabs= (MaterialTabs) getActivity().findViewById(R.id.subTabs);
        subPager= (ViewPager) getActivity().findViewById(R.id.subPager);
        latestNewLetterAdapter adapter=new latestNewLetterAdapter(getFragmentManager());
        subPager.setAdapter(adapter);
        subTabs.setViewPager(subPager);
        subTabs.setIndicatorColor(Color.parseColor(header_colors.get(0)));
        subTabs.setTextColorSelected(Color.parseColor(header_colors.get(0)));

        subPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener()
        {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }

            @Override
            public void onPageSelected(int position)
            {
                subTabs.setIndicatorColor(Color.parseColor(header_colors.get(position)));
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }


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

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        setupTabs();
    }


    class latestNewLetterAdapter extends FragmentStatePagerAdapter implements MaterialTabs.CustomTabProvider
    {
        public latestNewLetterAdapter(FragmentManager fm)
        {
            super(fm);
        }

        @Override
        public Fragment getItem(int position)
        {
            return fList.get(position);
        }


        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            // TODO Auto-generated method stub

        }

/*
        @Override
        public CharSequence getPageTitle(int position)
        {
            String x=headers.get(position);
            if(x.contains("&"))
            {
              x=x.replaceAll("&amp;"," & ");
            }
            return x;
        }
*/
        @Override
        public int getCount()
        {
            return headers.size();
        }

        @Override
        public View getCustomTabView(ViewGroup viewGroup, int i) {
            TextView header=new TextView(getActivity());
            String x=headers.get(i);
            if(x.contains("&"))
            {
                x=x.replaceAll("&amp;"," & ");
            }
            header.setTextColor(Color.parseColor(header_colors.get(i)));
            header.setText(x);
            header.setGravity(Gravity.CENTER);
            return header;
        }
    }
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View inflatedView = inflater.inflate(R.layout.sub_list_fragment, container, false);
    ((TextView) inflatedView.findViewById(R.id.cat)).setText(category);
}