如何将剩余 api 列表传递给 android 中的片段 activity

How to pass rest api list to fragment activity in android

我有 MainActivity 和三个片段 activity。在 MainActivity 中,它从 REST 服务调用中获取数据。我想将 REST 数据传递给所有三个片段。如何实现?

这是我的代码

MainActivty

public class MainActivity extends AppCompatActivity {

private Toolbar toolbar;
private TabLayout tabLayout;
private ViewPager viewPager;
private CustomListAdapter adapter;
private static final String TAG = MainActivity.class.getSimpleName();



public List<MenuItem> mainList = new ArrayList<MenuItem>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

          JsonArrayRequest itemReq = new JsonArrayRequest(url,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    Log.d(TAG, response.toString());
                    try {

                            JSONArray jsonArray = response.getJSONArray(0);
                            // Parsing json
                            for (int i = 0; i < jsonArray.length(); i++) {
                                try {
                                    JSONObject obj = jsonArray.getJSONObject(i);
                                    MenuItem menuItem = new MenuItem();
                                    menuItem.setName(obj.getString("name"));
                                    menuItem.setImage(obj.getString("image"));
                                    menuItem.setPrice(obj.getString("price"));
                                    menuItem.setDesc(obj.getString("desc"));

                                    mainList.add(menuItem);

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

                            }

                    }catch (JSONException e){

                    }
                    // notifying list adapter about data changes
                    // so that it renders the list view with updated data
                    adapter.notifyDataSetChanged();
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            VolleyLog.d(TAG, "Error: " + error.getMessage());
             hidePDialog();

        }
    });

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

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

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




private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new First(), "FIRST");
    adapter.addFragment(new Second(), "SECOND");
    adapter.addFragment(new Third(), "THIRD");
    viewPager.setAdapter(adapter);
}

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

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

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

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

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

}

片段Activity

public class First extends Fragment{
    private ProgressDialog pDialog;
    private GridView gridView;
    private CustomListAdapter adapter;
    public First() {

    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view =  inflater.inflate(R.layout.fragment_one, container, false);

        gridView = (GridView) view.findViewById(R.id.list);
        adapter = new CustomListAdapter(getActivity(), startersList);
        gridView.setAdapter(adapter);
        return view;
    }
}

在这一行中 adapter = new CustomListAdapter(getActivity(), startersList); 我想从 MainActivity

获取列表数据

如果你可以让你的菜单项 class 实现 Parcelable

How can I make my custom objects Parcelable?

那么只需将参数传递给 Fragment

Bundle args = new Bundle();
args.putParcelableArrayList("list", mainList) ;
Fragment first = new First();
first.setArguments(first);
adapter.addFragment(first, "FIRST");

在片段中,您将使用

 getArguments().getParcelableArrayList("list")

或者,您也可以将 JSON 字符串传递到参数中并在 Fragment 中解析它。

注意:但是,这仅在您在 onResponse 中移动 viewpager 设置方法时才有效。否则,您的片段已经用空列表创建。

或者您可以在适配器中实现上述逻辑

@Override
public Fragment getItem(int position) {
    Fragment f = mFragmentList.get(position);
    // TODO  f.setArguments() 
   return f;
}