2017-12-07 1 views
0

로드 된 JSON 파일에서 동적으로 탭을 만들고 (나중에 각 탭의 조각에 다른 동적으로 생성 된 콘텐츠 추가) 시도했지만 성공하지는 못했습니다. 어떤 탭이없는 응용 프로그램은 단지 시작 알코올 음료, 스프라고전달 된 JSON을 통해 Android에서 동적으로 탭 생성/생성

public class MainActivity extends AppCompatActivity { 
private Toolbar toolbar; 
private TabLayout tabLayout; 
private ViewPager viewPager; 

String myData = ""; 

public static String test; 

//Fragment List 
private final List<Fragment> mFragmentList = new ArrayList<>(); 
//Title List 
private final List<String> mFragmentTitleList = new ArrayList<>(); 
private ViewPagerAdapter adapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    viewPager = (ViewPager) findViewById(R.id.viewpager); 
    loaddata(); 
    //create multiple titles, but use OneFragment() for every new tab 
    for(int i = 0; i < mFragmentTitleList.size(); i++) { 
     mFragmentList.add(new OneFragment()); 
    } 
    setupViewPager(viewPager); 

    tabLayout = (TabLayout) findViewById(R.id.tabs); 
    tabLayout.setupWithViewPager(viewPager); 
    // Tab ViewPager setting 
    viewPager.setOffscreenPageLimit(mFragmentList.size()); 
    tabLayout.setupWithViewPager(viewPager); 
} 

//Loading the JSON data, which will be used to create dynamically content such as tabs and info for the Fragments 
private void loaddata() { 
    RequestQueue queue = Volley.newRequestQueue(this); 
    String url = "https://ipfs.io/ipfs/QmQ69ScwoqSsFAdGV4oUKNaDMzSDuY9zcdRoFYkHPUZM7E"; 
    String line = ""; 

    StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 
      myData = response; 
      //Log.d("response", myData); 

      JSONObject object = null; 
      try { 
       object = new JSONObject(myData); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      JSONObject menuitems = null; 
      try { 
       menuitems = object.getJSONObject("menuitems"); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      for(int i = 0; i<menuitems.length(); i++) { 
       try { 
        mFragmentTitleList.add(menuitems.names().getString(i)); 
        //mFragmentTitleList gives output [Alcohol Drinks, Soups, Salads] 
        Log.d("test", String.valueOf(mFragmentTitleList)); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
       //Log.d(TAG, "Key = " + menuitems.names().getString(i) + " value = " + menuitems.get(menuitems.names().getString(i))); 
      } 
      /*try { 
       Log.d("testagain", "\"" +categories.getString(2)+ "\""); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      */ 

     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Context context = getApplicationContext(); 
      int duration = Toast.LENGTH_SHORT; 
      Toast.makeText(context, "That didn't work!", duration); 
     } 
    }); 
    queue.add(stringRequest); 
} 

private void setupViewPager(ViewPager viewPager) { 
    adapter = new ViewPagerAdapter(getSupportFragmentManager(), mFragmentList, mFragmentTitleList); 
    viewPager.setAdapter(adapter); 
} 


//ViewPagerAdapter settings 
class ViewPagerAdapter extends FragmentPagerAdapter { 
    private List<Fragment> mFragmentList = new ArrayList<>(); 
    private List<String> mFragmentTitleList = new ArrayList<>(); 

    public ViewPagerAdapter(FragmentManager fm, List<Fragment> fragments, List<String> titleLists) { 
     super(fm); 
     this.mFragmentList = fragments; 
     this.mFragmentTitleList = titleLists; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return mFragmentList.get(position); 
    } 

    @Override 
    public int getCount() { 
     return mFragmentList == null ? 0 : mFragmentList.size(); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return mFragmentTitleList.get(position); 
    } 

} 

} 나는 3 개의 탭이 있어야 끝에

, 샐러드 순간

생성. 도와 주셔서 감사합니다 ! :)

답변

1

loaddata -> onResponse "mFragmentList"목록을 채운 후에 탭을 만들어야합니다. 내가 무슨 뜻 이죠 아주 확실하지이기 때문에

편집,

public class MainActivity extends AppCompatActivity { 
private Toolbar toolbar; 
private TabLayout tabLayout; 
private ViewPager viewPager; 

String myData = ""; 

public static String test; 

//Fragment List 
private final List<Fragment> mFragmentList = new ArrayList<>(); 
//Title List 
private final List<String> mFragmentTitleList = new ArrayList<>(); 
private ViewPagerAdapter adapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 

toolbar = (Toolbar) findViewById(R.id.toolbar); 
setSupportActionBar(toolbar); 
getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

viewPager = (ViewPager) findViewById(R.id.viewpager); 
loaddata(); 

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

//Loading the JSON data, which will be used to create dynamically content 
such as tabs and info for the Fragments 
private void loaddata() { 
    RequestQueue queue = Volley.newRequestQueue(this); 
    String url = 
    "https://ipfs.io/ipfs/QmQ69ScwoqSsFAdGV4oUKNaDMzSDuY9zcdRoFYkHPUZM7E"; 
    String line = ""; 

StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { 
    @Override 
    public void onResponse(String response) { 
     myData = response; 
     //Log.d("response", myData); 

     JSONObject object = null; 
     try { 
      object = new JSONObject(myData); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     JSONObject menuitems = null; 
     try { 
      menuitems = object.getJSONObject("menuitems"); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     for(int i = 0; i<menuitems.length(); i++) { 
      try { 
       mFragmentTitleList.add(menuitems.names().getString(i)); 
       //mFragmentTitleList gives output [Alcohol Drinks, Soups, Salads] 
       Log.d("test", String.valueOf(mFragmentTitleList)); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      //Log.d(TAG, "Key = " + menuitems.names().getString(i) + " value = " + menuitems.get(menuitems.names().getString(i))); 
     } 
     //create multiple titles, but use OneFragment() for every new tab 
     for(int i = 0; i < mFragmentTitleList.size(); i++) { 
      mFragmentList.add(new OneFragment()); 
     } 
     setupViewPager(viewPager); 
     tabLayout.setupWithViewPager(viewPager); 
     // Tab ViewPager setting 
     viewPager.setOffscreenPageLimit(mFragmentList.size()); 
     tabLayout.setupWithViewPager(viewPager); 
     /*try { 
      Log.d("testagain", "\"" +categories.getString(2)+ "\""); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     */ 

    } 
}, new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError error) { 
     Context context = getApplicationContext(); 
     int duration = Toast.LENGTH_SHORT; 
     Toast.makeText(context, "That didn't work!", duration); 
    } 
}); 
queue.add(stringRequest); 
} 

private void setupViewPager(ViewPager viewPager) { 
adapter = new ViewPagerAdapter(getSupportFragmentManager(), mFragmentList, mFragmentTitleList); 
viewPager.setAdapter(adapter); 
} 


//ViewPagerAdapter settings 
class ViewPagerAdapter extends FragmentPagerAdapter { 
private List<Fragment> mFragmentList = new ArrayList<>(); 
private List<String> mFragmentTitleList = new ArrayList<>(); 

public ViewPagerAdapter(FragmentManager fm, List<Fragment> fragments, List<String> titleLists) { 
    super(fm); 
    this.mFragmentList = fragments; 
    this.mFragmentTitleList = titleLists; 
} 

@Override 
public Fragment getItem(int position) { 
    return mFragmentList.get(position); 
} 

@Override 
public int getCount() { 
    return mFragmentList == null ? 0 : mFragmentList.size(); 
} 

@Override 
public CharSequence getPageTitle(int position) { 
    return mFragmentTitleList.get(position); 
} 

} 
} 
+0

당신이 더 제발 설명 할 수있는이 코드를 붙여 넣기? –

관련 문제