2014-09-19 2 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

+0

Существует три скользящих страницы, каждый из которых показывает один и тот же фрагмент/Fragment_Hashvehamarner() /. Каждая страница, когда я скользя, имеет позицию int, я хочу получить эту позицию во фрагмент, когда создается фрагмент. – ArmDroid

+0

Я хочу знать, какая страница загружается, первая позиция 0, вторая позиция 1 или третья позиция 3, для получения данных из базы данных. – ArmDroid

ответ

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 («Фрагмент», «Hashvehamarner onCreate ---» + mSelectedPosition); -> I/Fragment: Hashvehamarner onCreate --- null – ArmDroid

+0

жаль, что это опечатка, это должно быть 'int mSelectedPosition = getArguments(). GetInt (EXTRA_PAGE_POSITION);' – mmlooloo

+0

На первой странице mSelectedPosition = 1/good /, когда я я скользя по второй странице mSelectedPosition = 2/perfect /, когда я скользя по третьей странице onCreate метод не работал, после того, как я сползаю на вторую страницу mSelectedPosition = 0, – ArmDroid

Смежные вопросы