Вопрос по android, http, android-viewpager – Работа с ViewPager и фрагментами

10

Я начинающий разработчик Android. Я пытаюсь разобраться в ViewPager. Прежде чем пытаться работать с этим примером:

http://mobile.tutsplus.com/tutorials/android/android-user-interface-design-horizontal-view-paging/

У меня были рабочие представления, но я не мог заставить работать функциональность в этом, и мне сказали, что мне нужно использовать фрагменты в ViewPager.

Я пошел с этим учебником вместо:

http://tamsler.blogspot.co.uk/2011/11/android-viewpager-and-fragments-part-ii.html

У меня есть основы ViewPager с работающим фрагментом:

FragmentPagerActivity.java

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;

public class FragmentPagerActivity extends FragmentActivity {

    private static final int NUMBER_OF_PAGES = 10;

    private ViewPager mViewPager;
    private MyFragmentPagerAdapter mMyFragmentPagerAdapter;

    public void onCreate(Bundle savedInstanceState) {

         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
         mViewPager = (ViewPager) findViewById(R.id.viewpager);
         mMyFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
         mViewPager.setAdapter(mMyFragmentPagerAdapter);
    }

    private static class MyFragmentPagerAdapter extends FragmentPagerAdapter {

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

         @Override
         public Fragment getItem(int index) { 

              return PageFragment.newInstance("My Message " + index);
         }  

         @Override 
         public int getCount() {

              return NUMBER_OF_PAGES;
         }
    }
}

PageFragment.java:

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class PageFragment extends Fragment {

    public static PageFragment newInstance(String title) {

        PageFragment pageFragment = new PageFragment();
        Bundle bundle = new Bundle();
        bundle.putString("title", title);
        pageFragment.setArguments(bundle);
        return pageFragment;
    }

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

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

        View view = inflater.inflate(R.layout.fragment, container, false);
        TextView textView = (TextView) view.findViewById(R.id.textView1);
        textView.setText(getArguments().getString("title"));
        return view;
    }
}

main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
<android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</LinearLayout>

fragment.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

</LinearLayout>

Я хочу иметь возможность заменить текущий макет в ViewPager на 7 из моих собственных макетов, которые уже существуют, и добавить функциональность к макетам с помощью фрагментов. Что я могу сделать с кодом, который у меня уже есть, и изменениями, которые нужно сделать, чтобы это работало должным образом?

Если есть какие-либо примеры ViewPager с фрагментами, доступными в Интернете, а не просто кратко рассмотрим его, как в блоге разработчиков Adroid, я буду очень благодарен.

Ваш Ответ

3   ответа
12

Объявите это внутри вашего MyFragmentPagerAdapter:

private Fragment[] fragments = new Fragment[] { new Fragment1(),Fragment2(),Fragment3(),Fragment4(),Fragment5()};

затем реализуйте метод getItem следующим образом:

 @Override  
         public Fragment getItem(int index) {  

              return fragments[index];
         } 

и для каждого фрагмента есть свой класс и макет:

public class Fragment1 extends Fragment { 
   //your code here
}
Большое спасибо за помощь, я попробую и дам вам знать, если это работает. kibria3
11

Предполагая, что вы знаете, как создавать фрагменты сами, просто сделайте что-то вроде этого, чтобы поместить их в свой пейджер просмотра:

        @Override
        public Fragment getItem(int page) {
            switch (page) {
                case 0: return new MyFirstFragment();
                case 1: return new MySecondFragment();
                case 2: return new MyThirdFragment();
                //and so on....
            }
            return null;
        }

        @Override
        public int getCount() {
            return [the count of total fragments];
        }

вместо этого:

     @Override  
     public Fragment getItem(int index) {  
          return PageFragment.newInstance("My Message " + index);
     }
Большое спасибо за помощь, я сделаю это и сообщу, смогу ли я заставить это работать. kibria3
2

Я немного изменил ответ от Гамбонуса:

Объявите это внутри вашего MyFragmentPagerAdapter:

private SparseArray<Fragment> fragments = new SparseArray<Fragment>();

затем реализуйте метод getItem следующим образом:

 @Override  
 public Fragment getItem(int index) {
     if(fragments != null && fragments.size() >= index)
        return fragments.get(i);
     else return null;
 }

Вы также должны переопределить getSize ()

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

Затем вы можете динамически добавлять и удалять фрагменты из него.

Похожие вопросы