在不同的Tab片段上从API加载相同的数据

时间:2015-12-18 10:08:05

标签: android android-fragments

我的应用中有3个标签片段,每个片段都表示来自同一API网址的不同数据(一次调用10条记录)。 这是我试图实现的最终结果:

标签1:显示来自我的API网址的记录1-5

标签2:从我的API网址显示记录6-10

标签3:显示记录1-10中的不同值

我的目标是在第一个标签( Tab1 )中加载所有这些数据,并显示每个标签中返回的JSON数据的不同结果,如上所述。

目前为止取得进展:编码 Tab1 以显示记录1-10。

需要您的帮助:

  1. Tab1 显示记录1-5而不是全部10个。由于我想在同一次运行中加载所有10个结果并且不会多次调用API,因此我不会'我希望限制结果数量
  2. 代码 Tab2 显示 Tab1 中收到的JSON DATA中的记录6-10。 意味着我需要从Tab2通信到我的Tab1
  3. 希望为此获得指导,谢谢!

    我一直在考虑的事情:

    设置3 静态JSONOAdapters 并使用json结果设置它并将其用于每个选项卡。但.. 静态JSON适配器是一个很好的解决方案还是可能导致内存问题?

    另一个问题:当我使用它时:

    public void updateData(JSONArray jsonArray) {
            // update the adapter's dataset
            mJsonArray = jsonArray;
            notifyDataSetChanged();
        }
    

    我得到结果1-10,我不知道如何将它限制在前5或结果6-10。

2 个答案:

答案 0 :(得分:0)

在您的活动中加载1到10的数据,或者片段包含2个片段

之后为每个片段添加函数setData。

最后,转到您的片段并加载之前设置的数据。

答案 1 :(得分:0)

  1. 在您的活动中加载数据。
  2. 启动ViewPager适配器并在构造函数中发送项目数组。

    public class MyPagerAdapter extends FragmentPagerAdapter { 
    private static int NUM_ITEMS = 3;
    ArrayList<Item> arr; 
    
    
    public MyPagerAdapter(FragmentManager fragmentManager,ArrayList<Item> arr) { 
        super(fragmentManager); 
        this.arr=arr;   
    } 
    
    // Returns total number of pages 
    @Override 
    public int getCount() { 
        return NUM_ITEMS;
    } 
    
    // Returns the fragment to display for that page 
    @Override 
    public Fragment getItem(int position) {
        switch (position) {
        case 0: // Fragment # 0 - This will show FirstFragment 
            return FirstFragment.newInstance(arr.subList(0,5)); 
        case 1: // Fragment # 1 
            return FirstFragment.newInstance(arr.subList(6,10)); 
        case 2: // Fragment # 2
            //Change your values according to you need then pass the arr in Frag 3
            return SecondFragment.newInstance(arr); 
        default: 
            return null; 
        } 
    } 
    
    // Returns the page title for the top indicator 
    @Override 
    public CharSequence getPageTitle(int position) {
        return "Page " + position;
    } 
    
    } 
    
    1. 在Fragment中创建静态方法以接收项目数组。