2015-01-16 2 views
0

У меня есть активность, которая содержит ящик для навигации, в этом классе мои элементы навигации указывают на классы фрагментов. В одном из классов фрагментов я использую динамический просмотр пейджера для отображения элементов, но как я могу использовать диспетчер фрагментов класса фрагмента как аргумент пейджера представления, который нуждается в фрагментационном аргументе активности или активности фрагмента. Нужны некоторые решения.Как отобразить фрагмент в viewpager, в классе фрагментов?

+0

может размещать код? – Krish

ответ

2

Я делаю что-то подобное прямо сейчас. У меня есть только ViewPager под ящиком навигации, но если у вас более сложный макет, то он должен работать.

Для начала, у меня есть макет активности (большинство из этого было создано с помощью Android Studio)

<android.support.v4.widget.DrawerLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/drawer_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.example.you.yourapp.YourActivity"> 

    <FrameLayout android:id="@+id/your_container" android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

    <fragment android:id="@+id/navigation_drawer" 
    android:layout_width="@dimen/navigation_drawer_width" android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:name="com.example.you.yourapp.NavigationDrawerFragment" 
    tools:layout="@layout/fragment_navigation_drawer" /> 

</android.support.v4.widget.DrawerLayout> 

Активность использует FragmentManager для замены в другом фрагменте, который содержит ViewPager в FrameLayout

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_your); 

    ... 

    Fragment fragment = YourFragment.newInstance(Bundle args); 
    getSupportFragmentManager() 
      .beginTransaction().replace(R.id.your_container, fragment) 
      .commit(); 
} 

Фрагмент, который имеет ViewPager просто

<android.support.v4.view.ViewPager android:id="@+id/your_view_pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 

в YourFragment.java реализовать FragmentPagerAdapter (вы могли бы сделать это как внутренний класс, но я столкнулся с проблемами со статическим распределением, плюс это уборщик)

public class YourFragment extends android.support.v4.app.Fragment { 

    private ViewPager mPager; 

    public YourFragment() { 

} 

public static TaskFragment newInstance(Uri uri, String outlineText) { 
    TaskFragment fragment = new YourFragment(); 

    Bundle args = new Bundle(); 
    //set args 
    fragment.setArguments(args); 

    return fragment; 
} 

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

    ... 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) 
{ 
    View rootView = inflater.inflate(R.layout.fragment_your, null); 
    mPager = (ViewPager) rootView.findViewById(R.id.your_view_pager); 

    TaskPagerAdapter adapter = new TaskPagerAdapter(getFragmentManager()); 
    mPager.setAdapter(adapter); 

    return rootView; 
} 

... 

private class YourPagerAdapter extends FragmentStatePagerAdapter { 

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

    @Override 
    public int getCount() { 
     return count; //however you get the count 
    } 

    @Override 
    public android.support.v4.app.Fragment getItem(int position) { 
     //set the arguments for your page 
     return PageFragment.newInstance(args); 
    } 

} 

} 

ETA: Так что теперь реализовать пользовательский интерфейс для навигации ящик обратных вызовов

... 
private NavigationDrawerCallbacks mCallbacks 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    mCallbacks = (NavigationDrawerCallbacks) activity; 
} 

... 

@Override 
public void onClick(View view) { //whatever your click listener is 
    Fragment fragment = getFragmentSomehow(); //get your fragment 
    mCallbacks.onNavigationItemSelected(fragment); 
} 

... 

public static interface NavigationDrawerCallbacks { 
    void onNavigationDrawerItemSelected(Fragment fragment); 
} 

Теперь есть YourActivity реализовать этот интерфейс

public class YourFragment extends Activity 
     implements NavigationDrawerCallbacks 
{ 

... 

    @Override 
    public void onNavigationDrawerItemSelected(Fragment fragment) { 
     getSupportFragmentManeger() 
      .beginTransaction() 
      .replace(R.id.you_container, fragment) 
      .commit(); 
    } 
... 
} 

Я думаю, что это то, что вы хотите сделать. Надеюсь, это поможет

+0

no @seiterm Я не сталкиваюсь с такой проблемой, ее то, что я объяснил выше. в любом случае спасибо. – ManishSB

+0

Хорошо, я думаю, что вижу. Одна минута – seiterm

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