동적 탭 레이아웃을 만들려고합니다. json에서 값을 가져 오는 중 탭을 만들 수 있지만 그 값 (List)을 값 (List)에 추가하고자합니다. 값 (List)도 json 형식입니다. 나는 그것을 어떻게 성취 할 수 있는지 알지 못한다.JSlay를 통해 만든 tablayout 안에 데이터를 추가하는 방법은 무엇입니까?
이 내 JSON 형식으로 내가 탭 내부의 값 (목록) 등의 탭 이름으로 cat_name
및 sub_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의 클래스이 내 출력