2017-03-23 8 views
0

동적 탭 레이아웃을 만들려고합니다. json에서 값을 가져 오는 중 탭을 만들 수 있지만 그 값 (List)을 값 (List)에 추가하고자합니다. 값 (List)도 json 형식입니다. 나는 그것을 어떻게 성취 할 수 있는지 알지 못한다.JSlay를 통해 만든 tablayout 안에 데이터를 추가하는 방법은 무엇입니까?

이 내 JSON 형식으로 내가 탭 내부의 값 (목록) 등의 탭 이름으로 cat_namesub_categories 무엇입니까이에서

{ "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" } ] } ] } 

입니다.

여기 JSONFormat에서 값을 받고 있습니다. 값을받은 후 해당 값을 Fragment parentclass에 보냈습니다. 아래에 선언되어 있습니다

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 값을받은 후 FragmentChild 클래스로 보냅니다.

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

그리고 이것은 내가

FragmentChild.class 받고 탭 내부의 값을 표시하고있는 FragmentChild의 클래스이 내 출력

enter image description here

답변

0

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

    } 


} 

귀하 서브 고양이에 대한 addlist 방법 egories는 아무 값도 사용하지 않는 새로운 Bundle에 값을 넣습니다.함수를 불필요한 Bundle 매개 변수와 함께 작성하는 것이 더 좋을 것 같으니 fragmentChild.setArguments(bundle) 호출에 추가해야합니다.