Android:动态视图寻呼机只显示第一个片段中的更改
我对android非常陌生,我正在尝试的是动态创建滑动选项卡,并将可滑动页面(即片段)添加到查看页面。 我看了一些教程并尝试了一些东西。 我正在粘贴下面相同的代码 这是我正在添加到viewpager的片段类 这是一个主要的片段,其中包含选项卡和一个viewpager 在前面的活动中,我使用异步任务从服务器检索json数组数据,并在构造函数中以字符串的形式将其传递给此fragement 适配器用标题填充选项卡,并从片段类的自定义构造函数中创建的片段列表中获取项目。我还了解到,使用自定义构造函数不是一个好的实践,我将实现用于相同目的的接口,但这不是这里的主要问题 问题 如果你看到,我正在将类别id传递给viewpager的每个片段,它应该在每个片段中设置相应的类别,但这里发生的事情只是在第一个片段中设置id或将其称为第一个选项卡。其余所有片段只显示文本类别id,而不是在我滑动到第二个片段时要设置的类别fragement第二个片段的类别id在第一个片段中设置,当我滑动到第三个片段时,第三个片段的类别id设置为第一个 所以基本上所有的动作都发生在第一个片段中,而不是全部 请问我哪里错了?Android:动态视图寻呼机只显示第一个片段中的更改,android,android-fragments,android-viewpager,android-tablayout,Android,Android Fragments,Android Viewpager,Android Tablayout,我对android非常陌生,我正在尝试的是动态创建滑动选项卡,并将可滑动页面(即片段)添加到查看页面。 我看了一些教程并尝试了一些东西。 我正在粘贴下面相同的代码 这是我正在添加到viewpager的片段类 这是一个主要的片段,其中包含选项卡和一个viewpager 在前面的活动中,我使用异步任务从服务器检索json数组数据,并在构造函数中以字符串的形式将其传递给此fragement 适配器用标题填充选项卡,并从片段类的自定义构造函数中创建的片段列表中获取项目。我还了解到,使用自定义构造函数不是
我需要添加动态页面,因为类别的数量每次都在变化,因此应将页面的数量添加到查看页面,并在每个页面中加载与该页面的类别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("&"," & ");
}
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("&"," & ");
}
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);
}