2015-06-27 26 views
0

https://github.com/chrisbanes/cheesesquare上找到示例代码。我创建了四个实例CheeseListFragment。我无法理解如何获得该课程的第三例和传递数据?特别是对第三个如何访问类的目的实例并传递数据?

public class MainActivity extends AppCompatActivity implements CheeseListFragment.OnDataPass { 
    Adapter adapter; 

... 
     adapter = new Adapter(getSupportFragmentManager()); 

      for (int i=0; i<4; i++){ 
       adapter.addFragment(new CheeseListFragment(), items[i]); 
      } 
... 

viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
      @Override 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
      } 

      @Override 
      public void onPageSelected(int position) { 
       onDataPass(String.valueOf(position)); // how send data to third instance of CheeseListFragment 





    static class Adapter extends FragmentPagerAdapter { 
     private final List<Fragment> mFragments = new ArrayList<>(); 
     private final List<String> mFragmentTitles = new ArrayList<>(); 



     public Adapter(FragmentManager fm) { 
      super(fm); 
     } 

     public void addFragment(Fragment fragment, String title) { 
      mFragments.add(fragment); 
      mFragmentTitles.add(title); 
     } 

     @Override 
     public Fragment getItem(int position) { 


      return mFragments.get(position); 
     } 

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

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




public class CheeseListFragment extends Fragment { 

    List<News> lnews; 
    private RecyclerViewAdapter mRecyclerviewAdapter; 
    OnDataPass dataPasser; 

... 
    protected String[] mDataset; 



    public interface OnDataPass { 
     public void onDataPass(String data); 
    } 

    @Override 
    public void onAttach(Activity a) { 
     super.onAttach(a); 
     dataPasser = (OnDataPass) a; 

    } 
    public void passData(String data) 
     dataPasser.onDataPass(data); 
    } 

/////////////////// ////////////////////////////////////

Fragment fragment = adapter.getItem(2); 
CheeseListFragment cheesyFragment = (CheeseListFragment) fragment; 
cheesyFragment.onDataPass(...) // how pass data? 

回答

1

您可以通过在适配器中使用getItem()方法来获得第三个片段。在你的情况下,致电adapter.getItem(2)

假设您不只是想通过位置添加来查找片段,还可以将其他方法添加到适配器以通过标题获取片段。

public Fragment getFragmentByTitle(String title) { 
    if (!mFragmentTitles.contains(title)) 
     return null; 

    return mFragments.get(mFragmentTitles.indexOf(title)); 
} 

至于将数据传递到CheeseListFragment,你不必使用一个接口作为你的示例代码,只需添加一个公共方法onDataPass()到CheeseListFragment类并调用,当你拿到片段。

+0

我想传递数据到目的片段fragment = adapter.getItem(2); CheeseListFragment cheesyFragment =(CheeseListFragment)片段;分段。 cheesyFragment.onDataPass(...) – mehelta

+0

@mehelta修改我的答案,希望能回答你的问题的第二部分。 – user4989692

1
Fragment fragment = adapter.getItem(2); 

但随后你需要投到奶酪:

CheeseListFragment cheesyFragment = (CheeseListFragment) fragment; 

现在你有第三奶酪片段。

+0

是的。 cheesyFragment.onDataPass(...) – mehelta

相关问题