【问题标题】:Working with ViewPager and Fragments使用 ViewPager 和 Fragments
【发布时间】:2012-04-16 19:40:59
【问题描述】:

我是一名初级 Android 开发人员。我正试图了解 ViewPager。在我尝试使用此示例之前:

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

我有视图工作,但无法在其中工作,我被告知我需要在 ViewPager 中使用 Fragments。

我改为使用本教程:

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

我已经掌握了 ViewPager 和 Fragment 工作的基础知识:

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>

片段.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>

我希望能够用我自己的 7 个已经存在的布局替换 ViewPager 中的当前布局,并使用 Fragments 向布局添加功能。我可以用我已经拥有的代码以及为使其正常工作而进行的更改做什么?

如果网上也有任何带有片段的 ViewPager 示例,而不是像 Adroid Developers 博客中那样简单地介绍一下,我将非常感激。

【问题讨论】:

    标签: android http android-viewpager


    【解决方案1】:

    在你的 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
    }
    

    【讨论】:

    • 非常感谢您的帮助,我会试一试,让您知道它是否有效。
    【解决方案2】:

    假设您知道如何自己创建片段,只需执行以下操作将它们放入您的视图分页器:

            @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);
         }
    

    【讨论】:

    • 非常感谢您的帮助,我会试一试,如果我能完成这项工作,请告诉您。
    【解决方案3】:

    我从hambonious修改了答案:

    在你的 MyFragmentPagerAdapter 中声明这个:

    private SparseArray&lt;Fragment&gt; fragments = new SparseArray&lt;Fragment&gt;();

    然后像这样实现 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();
     }
    

    然后你可以动态的添加和删除片段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-17
      • 2013-07-07
      相关资源
      最近更新 更多