생성 된 각 조각마다 동적으로 다른 콘텐츠 (JSON 구조에서 가져옴)를 어떻게 설정할 수 있습니까? 각 탭 조각에 대해 동적으로 다른 콘텐츠 (JSON에서) 생성
이
, 나는 번들을 통해 조각에 정보를 내 MainActivity 코드를 전달하고있다 :public class OneFragment extends Fragment {
private List<String> contentList = new ArrayList<>();
ArrayAdapter<String> adapter;
GridView gridView;
public OneFragment() {
// Required empty public constructor
}
@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
contentList = getArguments().getStringArrayList("data");
Log.d("contentList", contentList.toString());
View view = inflater.inflate(R.layout.fragment_one, null);
gridView = (GridView) view.findViewById(R.id.gridView);
adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, contentList);
gridView.setAdapter(adapter);
return view;
}
}
나는 모든 알코올 음료가 순간 :
public class MainActivity extends AppCompatActivity {
private Toolbar toolbar;
private TabLayout tabLayout;
private ViewPager viewPager;
private GridView gridView;
String myData = "";
public static String test;
//Fragment List
private final List<Fragment> mFragmentList = new ArrayList<>();
//Title, Soups, Alcohol, Salads Lists
public final List<String> mFragmentTitleList = new ArrayList<>();
public final List<String> soupsList = new ArrayList<>();
public final List<String> alcDrinksList = new ArrayList<>();
public final List<String> saladsList = new ArrayList<>();
public final List<String> randomList = 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);
//gridView = (GridView) findViewById(R.id.gridView);
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;
JSONArray soupsArray = null;
JSONArray alcDrinksArray = null;
JSONArray saladsArray = null;
JSONArray randomArray = null;
//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();
}
try {
alcDrinksArray = menuitems.getJSONArray("Alcohol Drinks");
} catch (JSONException e) {
e.printStackTrace();
}
for(int i = 0; i < alcDrinksArray.length(); i++) {
try {
alcDrinksList.add(String.valueOf(alcDrinksArray.getJSONObject(i).get("name")));
Log.d("alcDrinksList", alcDrinksList.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
try {
soupsArray = menuitems.getJSONArray("Soups");
} catch (JSONException e) {
e.printStackTrace();
}
for(int i = 0; i < soupsArray.length(); i++) {
try {
soupsList.add(String.valueOf(soupsArray.getJSONObject(i).get("name")));
} catch (JSONException e) {
e.printStackTrace();
}
}
try {
saladsArray = menuitems.getJSONArray("Salads");
} catch (JSONException e) {
e.printStackTrace();
}
for(int i = 0; i < saladsArray.length(); i++) {
try {
saladsList.add(String.valueOf(saladsArray.getJSONObject(i).get("name")));
} catch (JSONException e) {
e.printStackTrace();
}
}
for (int i = 0; i < menuitems.length(); i++) {
try {
mFragmentTitleList.add(menuitems.names().getString(i));
Bundle bundle = new Bundle();
//here I should pass dynamically created ArrayList<String> with data (e.g. different alcohol drinks, soups, salads, etc...) for the Fragment...
bundle.putStringArrayList("data", (ArrayList<String>) alcDrinksList);
Log.d("bundletest", alcDrinksList.toString());
mFragmentList.add(new OneFragment());
mFragmentList.get(i).setArguments(bundle);
//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)));
}
setupViewPager(viewPager);
//setupGridView(gridView);
tabLayout.setupWithViewPager(viewPager);
// Tab ViewPager setting
viewPager.setOffscreenPageLimit(mFragmentList.size());
tabLayout.setupWithViewPager(viewPager);
}
}, 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);
}
/*private void setupGridView(GridView gridView) {
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, alcDrinksList);
gridView = (GridView) findViewById(R.id.gridView);
gridView.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);
}
}
}
이 내 조각 클래스입니다 각 조각. 정적/JSON 이름을 호출하여 정적으로 설정할 수 있다는 것을 알고 있습니다./훨씬 더 쉬울 수도 있지만 내 응용 프로그램을 확장 가능하고 오픈 소스로 만들고 싶습니다. 그래서 모든 것을 동적으로 만들려고합니다 (JSON 파일 전달 :)).
그래서, 마지막에 나는 알코올 음료 탭/스프 /를 스프와 탭/샐러드/샐러드와 ...
이 목록은 내 코드가 작동하는지 확인하기위한 것입니다. 이론적으로 어쩌면 나는 탭을 만들 때마다 (for 루프에서) 새로운 List를 만들 필요가있다. 예. { "수프": [{ "이름": "콜리 플라워 크림", ...}, { "이름": "연어", ...}]. 따라서 새 탭 (예 :수프가 만들어지면 수프에 관한 정보 만 바인드해야합니다. 그런 다음 .get ("name")을 호출하고 수프의 이름을 조각에 표시합니다. –