使用 JSON 开发标签

develop tabs using JSON

我想知道我们是否可以使用 JSON.i 开发选项卡 根据 JSON 中的类别需要尽可能多的选项卡并且每个选项卡都必须包含列表视图(如果可能的话)请告诉我请问怎么做

MainActivity.class

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);
    }

//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")));
}

现在使用 ViewPager,您可以根据标签位置将列表显示到 Fragment 中。

这个 link 将有助于设置 TabLayout android-material-design-working-with-tabs

您还可以使用 google Gson 库来解析 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);