我们可以根据服务器响应要求在标签布局中添加标签吗?

时间:2015-12-02 07:14:51

标签: android android-tabs

我想在标签中显示餐馆的菜单类别。但是标签的数量将取决于特定餐厅中有多少类别,该类别的菜单将显示在相应页面的ListView中。这在Android中是否可行?请让我知道如何实现它。

1 个答案:

答案 0 :(得分:1)

是的,你可以。获取数据(可能是JSON)并将其保存到SQLite数据库后,您可以加载该数据并创建动态选项卡。假设您只需要一个代表特定类别的类别片段的片段。您可以根据您的类别ID或您传递的其他参数来概括该片段以支持和加载数据。

您可以说HomeTabsFragment代表主片段标签。在您获取类别时,您可以在该TabsAdapter中定义ArrayList<Category> categories,并将该适配器分配给您的viewPager mViewPager.setAdapter(mAdapter)。对于每个类别,您创建一个带有标题和片段的选项卡,仅为该选项卡获取数据,如适配器:

  public class TabsPagerAdapter extends FragmentStatePagerAdapter {

    private ArrayList<Category> categories;

    public TabsPagerAdapter(FragmentManager fm, Context context,ArrayList<Category> categories) {
        super(fm);
        this.categories=categories;
    }

    @Override
    public Fragment getItem(int position) {
        return CategoryFragment.newInstance(categories.get(position),position);
    }

    @Override
    public int getCount() {
        return categories.size();
    }

    @Override
    public CharSequence getPageTitle(int position){
        return categories.get(position).getTitle();
    }

    @Override
    public void unregisterDataSetObserver(DataSetObserver observer) {
        if (observer != null) {
            super.unregisterDataSetObserver(observer);
        }
    }
}

和CategoryFragment:

public class CategoryFragment extends Fragment {

        public CategoryFragment(){
        // required empty constructor
    }
    public static CategoryFragment newInstance(Category category,int position){
        CategoryFragment fragment=new CategoryFragment();

        Bundle args=new Bundle();
        args.putParcelable("category", category);
        args.putInt("position", position);
        fragment.setArguments(args);
        return fragment;
    }
    public Object getCategory(){
        return getArguments().getParcelable("category");
    }

     @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_list, container, false);

        //Fetch data for categoryID
        return view;
    }       
}