2012-04-16 79 views
10

Tôi là một nhà phát triển Android mới bắt đầu. Tôi đang cố gắng để có được đầu của tôi xung quanh ViewPager. Trước khi tôi đã cố gắng để làm việc với ví dụ này:Làm việc với ViewPager và Fragments

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

Tôi có quan điểm làm việc, nhưng không thể có được chức năng làm việc trong phạm vi đó, và tôi đã nói rằng tôi cần phải sử dụng mảnh vỡ trong ViewPager.

tôi đã đi với hướng dẫn này để thay thế:

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

Tôi đã nhận được những điều cơ bản của một ViewPager với một lao động 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> 

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> 

Tôi muốn để có thể thay thế các bố trí hiện tại trong ViewPager với 7 bố cục của riêng tôi mà đã tồn tại và thêm chức năng cho bố cục bằng Phân đoạn. Tôi có thể làm gì với mã mà tôi đã có và các thay đổi cần thực hiện để làm việc này đúng cách?

Nếu có bất kỳ ví dụ nào của ViewPager với Phân đoạn có sẵn trực tuyến cũng như thay vì chỉ ngắn gọn như trong blog Adroid Developers, tôi sẽ rất biết ơn.

Trả lời

11

Giả sử bạn biết làm thế nào để tạo ra các mảnh bản thân, chỉ cần làm một cái gì đó như thế này để có được chúng vào xem pager của bạn:

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

thay vì điều này:

 @Override 
    public Fragment getItem(int index) { 
      return PageFragment.newInstance("My Message " + index); 
    } 
+0

Cảm ơn bạn rất nhiều vì sự giúp đỡ, tôi sẽ cung cấp cho bạn một đi và cho bạn biết nếu tôi có thể làm việc này. – kibria3

12

Khai báo này bên MyFragmentPagerAdapter của bạn:

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

sau đó triển khai phương thức getItem như sau:

@Override 
     public Fragment getItem(int index) { 

       return fragments[index]; 
     } 

và đối với mỗi đoạn có nó là lớp riêng và bố trí:

public class Fragment1 extends Fragment { 
    //your code here 
} 
+0

Cảm ơn bạn rất nhiều vì đã giúp đỡ, tôi sẽ cung cấp cho bạn một đi và cho bạn biết nếu nó hoạt động. – kibria3

2

tôi sửa đổi câu trả lời từ hambonious một chút:

Khai báo này bên MyFragmentPagerAdapter của bạn:

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

sau đó triển khai phương thức getItem như sau:

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

Bạn cũng phải ghi đè getSize()

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

Sau đó, bạn có thể add năng động và loại bỏ các mảnh từ nó.

Các vấn đề liên quan