2017-03-23 4 views
0

J'essaye de faire un tablayout dynamique. J'obtiens des valeurs de json et je suis capable de faire des onglets mais je veux ajouter des valeurs (List) dans ces tabs.the Values ​​(List) est aussi au format json. Je ne comprends pas comment je peux y arriver.comment ajouter des données dans tablayout qui est créé via JSON?

c'est mon format JSON

{ "Categories": [ { "cat_id": "17", "cat_name": "Bridal Costume ", "sub_categories": [] }, { "cat_id": "18", "cat_name": "Jewellery", "sub_categories": [] }, { "cat_id": "19", "cat_name": "Office\/Godown", "sub_categories": [] }, { "cat_id": "20", "cat_name": "House\/Flat", "sub_categories": [] }, { "cat_id": "21", "cat_name": "Car\/Bike", "sub_categories": [] }, { "cat_id": "22", "cat_name": "Events", "sub_categories": [ { "cat_id": "22", "sub_cat_name": "Tent House" } ] }, { "cat_id": "23", "cat_name": "Fancy Dress", "sub_categories": [] }, { "cat_id": "24", "cat_name": "Other", "sub_categories": [ { "cat_id": "24", "sub_cat_name": "Experiences" }, { "cat_id": "24", "sub_cat_name": "Laptop" } ] } ] } 

Dans ce que je reçois cat_name comme nom Tab et sub_categories en tant que valeurs (liste) à l'intérieur de l'onglet.

Ici, je reçois une valeur de JSONFormat, Après avoir reçu des valeurs, j'envoie ces valeurs à Fragment parentclass. qui est déclarer ci-dessous

public void detail(){ 
     String category = null,cat_img,cat_id = null,sub_cat = null,s_name = null; 
     JSONObject c = null; 
     try { 

      JSONObject object = new JSONObject(myJSON); 
      JSONArray Jarray = object.getJSONArray("Categories"); 

      for(int i=0;i<Jarray.length();i++){ 
       c = Jarray.getJSONObject(i); 

       JSONArray moreDetails = c.getJSONArray("sub_categories"); 
       category = c.getString("cat_name"); 

       cat_id = c.getString("cat_id"); 
       sub_cat = c.getString("sub_categories"); 

       fragmentParent.addPage(category,cat_id); 


       for (int i2 = 0; i2 < moreDetails.length(); i2++) { 

        JSONObject detail = moreDetails.getJSONObject(i2); 
        s_name = detail.getString("sub_cat_name"); 
        String s_id = detail.getString("cat_id"); 
        fragmentParent.addlist(s_name,s_id); 
        Toast.makeText(this, s_name, Toast.LENGTH_SHORT).show(); 

       } 





      } 


     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 



    } 

FragmentParent.class, Après avoir reçu des valeurs i am envoyer à FragmentChild classe.

public class FragmentParent extends Fragment { 
    private TabLayout tabLayout; 
    private ViewPager viewPager; 
    private ViewPagerAdapter adapter; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_parent, container, false); 
     getIDs(view); 
     setEvents(); 
     return view; 
    } 

    private void getIDs(View view) { 
     viewPager = (ViewPager) view.findViewById(R.id.my_viewpager); 
     tabLayout = (TabLayout) view.findViewById(R.id.my_tab_layout); 
     adapter = new ViewPagerAdapter(getFragmentManager(), getActivity(), viewPager, tabLayout); 
     viewPager.setAdapter(adapter); 
    } 

    int selectedTabPosition; 

    private void setEvents() { 

     tabLayout.setOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager) { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       super.onTabSelected(tab); 
       viewPager.setCurrentItem(tab.getPosition()); 
       selectedTabPosition = viewPager.getCurrentItem(); 
       Log.d("Selected", "Selected " + tab.getPosition()); 
      } 

      @Override 
      public void onTabUnselected(TabLayout.Tab tab) { 
       super.onTabUnselected(tab); 
       Log.d("Unselected", "Unselected " + tab.getPosition()); 
      } 
     }); 
    } 

    public void addPage(String pagename,String id) { 
     Bundle bundle = new Bundle(); 
     bundle.putString("data", pagename); 
     bundle.putString("c_id", id); 
     FragmentChild fragmentChild = new FragmentChild(); 
     fragmentChild.setArguments(bundle); 
     adapter.addFrag(fragmentChild, pagename); 
     adapter.notifyDataSetChanged(); 
     if (adapter.getCount() > 0) tabLayout.setupWithViewPager(viewPager); 

     viewPager.setCurrentItem(adapter.getCount() - 1); 
     setupTabLayout(); 
    } 

    public void addlist(String listname,String id) { 
     Bundle bundle = new Bundle(); 
     bundle.putString("list_name", listname); 
     bundle.putString("s_id", id); 

    } 

    public void setupTabLayout() { 
     selectedTabPosition = viewPager.getCurrentItem(); 
     for (int i = 0; i < tabLayout.getTabCount(); i++) { 
      tabLayout.getTabAt(i).setCustomView(adapter.getTabView(i)); 
     } 
    } 
} 

Et ce la classe FragmentChild où je reçois et en montrant les valeurs dans les onglets

FragmentChild.class

public class FragmentChild extends Fragment { 
    String childname,img_name,cid,s_list,s_id; 
    TextView textViewChildName; 
    EditText editText; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_child, container, false); 
     Bundle bundle = getArguments(); 
     childname = bundle.getString("data"); 
     img_name = bundle.getString("gmi"); 
     cid = bundle.getString("c_id"); 
     s_list = bundle.getString("list_name"); 
     s_id = bundle.getString("s_id"); 
     getIDs(view); 
     return view; 
    } 

    private void getIDs(View view) { 
     textViewChildName = (TextView) view.findViewById(R.id.textViewChild); 
     textViewChildName.setText(childname+"-"+cid); 

    } 


} 

Ceci est ma sortie

enter image description here

Répondre

0

Votre addlist méthode pour sub cat egories met des valeurs dans le nouveau Bundle qui ne sert à rien. Supposons qu'il serait préférable de créer fragmentParent.addPage fonction avec inutile Bundle paramètre, qui devrait être ajouté à fragmentChild.setArguments(bundle) appel.