2014-09-19 18 views
0

當前替換的片段。使用pagerAdapter傳輸片段之間的數據

public class SlidingTabsFragment extends Fragment { 

private SlidingTabLayout mSlidingTabLayout; 
private ViewPager mViewPager; 

public SlidingTabsFragment(){} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    return inflater.inflate(R.layout.fragment_sample, container, false); 
} 

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 

    Context context= getActivity(); 
    mViewPager = (ViewPager) view.findViewById(R.id.viewpager); 

    FragmentManager fm = getFragmentManager(); 
    mViewPager.setAdapter(new Harkayin_PagerAdapter(fm,context)); 

    mSlidingTabLayout = (SlidingTabLayout) view.findViewById(R.id.sliding_tabs); 
    mSlidingTabLayout.setViewPager(mViewPager); 
} 



... 

這裏是PagerAdapter,持有與同一片段/ Fragment_Hashvehamarner()三個滑動頁面;/

public class Harkayin_PagerAdapter extends FragmentStatePagerAdapter { 

private Context mContext; 

public Harkayin_PagerAdapter(FragmentManager fm, Context context) { 
    super(fm); 
    mContext = context; 

} 

@Override 
public int getCount() { return 3;} 

@Override 
public CharSequence getPageTitle(int position) { 
    String[] tabs= mContext.getResources().getStringArray(R.array.hashvehamar_tabs); 
    return tabs[position]; 
} 

@Override 
public Fragment getItem(int position) { 
    Fragment fragment = null; 
    switch (position){ 
     case 0: 
      fragment = new Fragment_Hashvehamarner(); 
      break; 
     case 1: 
      fragment = new Fragment_Hashvehamarner(); 
      break; 
     case 2: 
      fragment = new Fragment_Hashvehamarner(); 
      break; 
     default: 
      break; 
    } 
    if (fragment != null){ 
     return fragment; 
    }else { 
     // error in creating fragment 
     Log.e("Harkayin_PagerAdapter", "Error in creating fragment"); 
     return null; 
     } 
    } 
} 

最後的頁面架片段

public class Fragment_Hashvehamarner extends Fragment { 

ExpandableListAdapter listAdapter; 
ExpandableListView expListView; 
HashMap<String, List<String[]>> listDataChild; 
ArrayList<String[]> listHeaderData; 
View rootView; 

public Fragment_Hashvehamarner() {} 

... 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    rootView = inflater.inflate(R.layout.fragment_hashvayin_plan, container, false); 
    return rootView; 
} 

@Override 
public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    // get the listview 
    expListView = (ExpandableListView) rootView.findViewById(R.id.lvExp); 
    // preparing list data 
    prepareListData(); 
    listAdapter = new ExpandableListAdapter(rootView.getContext(), listHeaderData, 
      listDataChild); 
    // setting list adapter 
    expListView.setAdapter(listAdapter); 
    // Inflate the layout for this fragment 


private void prepareListData() { 

    DataAdapter mDbHelper = new DataAdapter(rootView.getContext()); 
    mDbHelper.createDatabase(); 
    mDbHelper.open(); 
    listHeaderData = new ArrayList<String[]>(mDbHelper.getHashvehamarHeader(1)); 
    listDataChild = new HashMap<String, List<String[]>>(mDbHelper.getHashvehamarChildData(1)); 
    mDbHelper.close(); 
} 

現在的問題是:如何從PageAdapter獲取當前頁面位置到當前頁面持有者片段/ Fragment_Hashvehamarner()/中。

+0

'如何從PageAdapter當前頁面位置到當前頁面持有人fragment'你能解釋一下它進一步 – mmlooloo 2014-09-19 01:48:05

+0

有三個滑動頁面,每個頁面顯示相同的片段/ Fragment_Hashvehamarner()/。當我滑動時,每個頁面都有int位置,我希望在創建片段時將該位置變爲片段。 – ArmDroid 2014-09-19 01:58:11

+0

我想知道從哪個頁面加載,第一個位置0,第二個位置1或第三個位置3,從數據庫中獲取數據。 – ArmDroid 2014-09-19 02:02:53

回答

1

將以下方法添加到您的Fragment_Hashvehamarner類。

public static final String EXTRA_PAGE_POSITION = "page.position"; 

public static Fragment_Hashvehamarner newInstance(int id) { 
     Bundle args = new Bundle(); 
     args.putInt(EXTRA_PAGE_POSITION, id); 
     Fragment_Hashvehamarner fragment = new Fragment_Hashvehamarner(); 
     fragment.setArguments(args);   
     return fragment; 
    } 

onCreate方法Fragment_Hashvehamarner

int mSelectedPosition= getArguments().getInt(EXTRA_PAGE_POSITION); 

然後在你的適配器:

public Fragment getItem(int position) { 
    Fragment fragment = Fragment_Hashvehamarner.newInstance(position); 
    return fragment; 
} 
+0

mSelectedPosition是字符串。 Log.i(「Fragment」,「Hashvehamarner onCreate ---」+ mSelectedPosition); - > I/Fragment:Hashvehamarner onCreate --- null – ArmDroid 2014-09-19 02:27:52

+0

對不起,它是一個錯字它必須是'int mSelectedPosition = getArguments()。getInt(EXTRA_PAGE_POSITION);' – mmlooloo 2014-09-19 02:30:25

+0

mSelectedPosition = 1/good /我滑動到第二頁mSelectedPosition = 2/perfect /,當我滑到第三頁onCreate方法不起作用後,我滑回第二頁mSelectedPosition = 0, – ArmDroid 2014-09-19 02:48:28