Android 使用JSON开发选项卡

Android 使用JSON开发选项卡,android,listview,android-fragments,tabs,android-tablayout,Android,Listview,Android Fragments,Tabs,Android Tablayout,我想知道我们是否可以使用JSON开发选项卡。根据JSON中的类别,我需要尽可能多的选项卡,并且每个选项卡必须包含列表视图。如果可能,请让我知道如何操作 主课 private void catmethod(){ String url="http://www.souqalkhaleejia.com/webapis/menus.php"; JsonObjectRequest catreq=new JsonObjectRequest(Request.Method.GET,

我想知道我们是否可以使用JSON开发选项卡。根据JSON中的类别,我需要尽可能多的选项卡,并且每个选项卡必须包含列表视图。如果可能,请让我知道如何操作

主课

private void catmethod(){
        String url="http://www.souqalkhaleejia.com/webapis/menus.php";
        JsonObjectRequest catreq=new JsonObjectRequest(Request.Method.GET, url, (String) null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {
                    JSONArray menuarray=response.getJSONArray("menu");
                    for (int i=0;i<menuarray.length();i++){
                        JSONObject menuobj=menuarray.getJSONObject(i);
                        tabs.addTab(tabs.newTab().setText(menuobj.getString("title")));
                        Toast.makeText(MainActivity.this, menuobj.getString("title"), Toast.LENGTH_SHORT).show();
                    }
                    TabsAdapter tabsAdapter=new TabsAdapter(getSupportFragmentManager(),menuarray.length());
                    viewpager.setAdapter(tabsAdapter);
                    tabs.setupWithViewPager(viewpager);
                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d("CatMenu", String.valueOf(error));
            }
        });
        AppController.getInstance().addToRequestQueue(catreq);
    }
private void catmethod(){
字符串url=”http://www.souqalkhaleejia.com/webapis/menus.php";
JsonObjectRequest catreq=新的JsonObjectRequest(Request.Method.GET,url,(String)null,new Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
试一试{
JSONArray menuarray=response.getJSONArray(“菜单”);
对于(inti=0;i//JSON=>[{“key”:“TAB1”,“list”:[您的列表]},{“key”:“TAB2”,“list”:[您的列表]},{“key”:“TAB3”,“list”:[您的列表]}]

使用JSON,您可以动态添加选项卡,如

tabLayout = (TabLayout) findViewById(R.id.tabs);
// get your json list
JSONArray jsonArray = your_json_array; 
for(int i = 0; i < yourJsonArray.length(); i++){
    JSONObject json = yourJsonArray.get(i);
    tabLayout.addTab(tabLayout.newTab().setText(json.getString("key")));
}
tabLayout=(tabLayout)findViewById(R.id.tabs);
//获取您的json列表
JSONArray JSONArray=您的_json_数组;
对于(int i=0;i
现在使用ViewPager,您可以根据选项卡位置将列表显示为片段

此链接将有助于设置表格布局

您还可以使用库解析JSON对象。

/JSON=>[{“键”:“TAB1”,“列表”:[您的列表]},{“键”:“TAB2”,“列表”:[您的列表]},{“键”:“TAB3”,“列表”:[您的列表]}]

使用JSON,您可以动态添加选项卡,如

tabLayout = (TabLayout) findViewById(R.id.tabs);
// get your json list
JSONArray jsonArray = your_json_array; 
for(int i = 0; i < yourJsonArray.length(); i++){
    JSONObject json = yourJsonArray.get(i);
    tabLayout.addTab(tabLayout.newTab().setText(json.getString("key")));
}
tabLayout=(tabLayout)findViewById(R.id.tabs);
//获取您的json列表
JSONArray JSONArray=您的_json_数组;
对于(int i=0;i
现在使用ViewPager,您可以根据选项卡位置将列表显示为片段

此链接将有助于设置表格布局

您还可以使用库解析JSON对象。

您的片段

public class OneFragment extends Fragment{

    public OneFragment() {
        // Required empty public constructor
    }

    public static Fragment getInstance(int position){
        OneFragment fragment = new OneFragment();
        Bundle bundle = new Bundle();
        bundle.putInt("position", position)
        fragment.setArgument(bundle);
        return fragment;
    }

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

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_one, container, false);
        int position = getArguments().getInt("position", 0);

        // set your list base on position
        if(position == 0){
           //list 1
        } else if(position == 1) {
           // list 2
        } else {
           // list 3
        }
        return view; 
    }

}
你的ViewPagerAdapter

class ViewPagerAdapter extends FragmentPagerAdapter {
    private JSONArray jsonArray;
    public ViewPagerAdapter(FragmentManager manager, JSONArray jsonArray) {
        super(manager);
        this.jsonArray= jsonArray;
    }


    @Override
    public Fragment getItem(int position) {
        return OneFragment.getInstance(position);
    }

    @Override
    public int getCount() {
        return jsonArray.length();
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return jsonArray.getJSONObject(position).getString("key");
    }
}
表格布局设置

    tabLayout = (TabLayout) findViewById(R.id.tabs);

    // get your json list
    JSONArray jsonArray = your_json_array; 
    for(int i = 0; i < yourJsonArray.length(); i++){
        JSONObject json = yourJsonArray.get(i);
        tabLayout.addTab(tabLayout.newTab().setText(json.getString("key")));
    }

    viewPager = (ViewPager) findViewById(R.id.viewpager);
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager(), yourJsonArray);
    viewPager.setAdapter(adapter);

    tabLayout.setupWithViewPager(viewPager);
tabLayout=(tabLayout)findViewById(R.id.tabs);
//获取您的json列表
JSONArray JSONArray=您的_json_数组;
对于(int i=0;i
你的片段

public class OneFragment extends Fragment{

    public OneFragment() {
        // Required empty public constructor
    }

    public static Fragment getInstance(int position){
        OneFragment fragment = new OneFragment();
        Bundle bundle = new Bundle();
        bundle.putInt("position", position)
        fragment.setArgument(bundle);
        return fragment;
    }

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

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_one, container, false);
        int position = getArguments().getInt("position", 0);

        // set your list base on position
        if(position == 0){
           //list 1
        } else if(position == 1) {
           // list 2
        } else {
           // list 3
        }
        return view; 
    }

}
你的ViewPagerAdapter

class ViewPagerAdapter extends FragmentPagerAdapter {
    private JSONArray jsonArray;
    public ViewPagerAdapter(FragmentManager manager, JSONArray jsonArray) {
        super(manager);
        this.jsonArray= jsonArray;
    }


    @Override
    public Fragment getItem(int position) {
        return OneFragment.getInstance(position);
    }

    @Override
    public int getCount() {
        return jsonArray.length();
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return jsonArray.getJSONObject(position).getString("key");
    }
}
表格布局设置

    tabLayout = (TabLayout) findViewById(R.id.tabs);

    // get your json list
    JSONArray jsonArray = your_json_array; 
    for(int i = 0; i < yourJsonArray.length(); i++){
        JSONObject json = yourJsonArray.get(i);
        tabLayout.addTab(tabLayout.newTab().setText(json.getString("key")));
    }

    viewPager = (ViewPager) findViewById(R.id.viewpager);
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager(), yourJsonArray);
    viewPager.setAdapter(adapter);

    tabLayout.setupWithViewPager(viewPager);
tabLayout=(tabLayout)findViewById(R.id.tabs);
//获取您的json列表
JSONArray JSONArray=您的_json_数组;
对于(int i=0;i
是的,先生,我只使用该教程,但它有片段na Sir用于选项卡布局我如何做siri使用volley Sir创建选项卡后,您可以根据选项卡位置或json对象id更新片段列表。在收到volleypublic void addfragment的json响应后设置选项卡(片段片段,字符串标题){fragmentlist.add(fragment);tabname.add(title);}--我不应该使用此方法na siryes先生我只使用了该教程,但它有用于选项卡布局的片段na Sir如何操作siri使用volley SIRs创建选项卡后,您可以根据选项卡位置或json对象id更新片段列表。在收到volleypublic void addfragment的json响应后设置选项卡(Fragment Fragment,String title){fragmentlist.add(Fragment);tabname.add(title);}--我不应该使用这个方法,因为我收到了这个错误,sir java.lang.NullPointerException:尝试在一个空对象referenceset Fragment.setArgument(Bundle)上调用虚拟方法'int android.os.Bundle.getInt(java.lang.String,int)';进入公共片段getInstance(int位置)。它放弃了。我还更新了答案我没有得到标题先生我更新了我的问题先生,请检查,先生,我没有理解它我编辑了我的答案,将jsonArray传递到viewpageradapter而不是jsonArray长度。尝试编辑viewpageradapter,希望它能解决您的问题我收到此错误,先生java.lang.NullPointerException:尝试在空对象referenceset fragment.setArgument(Bundle)上调用虚拟方法“int android.os.Bundle.getInt(java.lang.String,int)”;调用到公共片段getInstance(int位置)我还更新了答案我没有得到标题先生我更新了我的问题先生请检查先生我没听懂我编辑了我的答案,将jsonArray传递到viewpageradapter而不是jsonArray长度。尝试编辑viewpageradapter,希望它能解决您的问题