2013-04-26 72 views
10

我正在使用默認的Swipe Tab Fragment代碼,Android啓動時啓動一個新的Android應用程序。我已經想出瞭如何修改我的數據並使用選項卡,但我還沒有想出如何添加一個簡單的片段到已有的。我想在選項卡的頂部或正下方添加一個信息欄。我相信這很簡單,我只是不知道怎麼大聲笑。我通過實例學習。如何將一個片段添加到ViewPager? addView崩潰我的應用程序

我試着添加viewpager視圖,但我的應用程序崩潰了,我相信我完全做錯了。

在我的MainActivity: ...

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    // Set up the action bar. 
    final ActionBar actionBar = getActionBar(); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    mSectionsPagerAdapter = new SectionsPagerAdapter(
      getSupportFragmentManager()); 

    // Set up the ViewPager with the sections adapter. 
    mViewPager = (ViewPager) findViewById(R.id.pager); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 
    SubBarFragment infobar = new SubBarFragment(); 
    mViewPager.addView(infobar.getView());  
.....[extra code for menus and things] 

public class SectionsPagerAdapter extends FragmentPagerAdapter { 

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

    @Override 
    public Fragment getItem(int position) { 
....[code to show specific tabs and return the tab's fragment] 

infobarfragment.java

public class InfobarFragment extends Fragment { 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.infobar, container, false); 
     return view; 
     } 

} 

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity" /> 

infobar.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="horizontal" > 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/ic_wifi" /> 

    <TextView 
     android:id="@+id/statusText1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:text="Wifi Status Information" /> 

</LinearLayout> 
+0

你有一個適配器的ViewPager,使用方法getItem/instanciateItem(取決於你使用的是:碎片還是簡單的視圖)。這些方法爲viewpager對象提供了所有需要的視圖。 – Andreas 2013-04-26 08:47:30

+0

你可以在適配器中返回多個片段嗎?我已經想到如何使用Santhosh的幫助來添加片段,但它只是將它視爲我可以滑過的另一個「頁面」。無論我在哪個網頁,我都希望它持久。我曾希望它在標籤上方,但我認爲這不可能。因此,現在我猜,讓它下面的標籤是好的。思考? – CREW 2013-04-26 11:15:47

回答

14

你可以按照這種方法:

只爲分頁器中的每個視圖使用片段。

onCreate()中寫下面的代碼FragmentActivity的方法。

List<Fragment> fragments = new Vector<Fragment>(); 

//for each fragment you want to add to the pager 
Bundle page = new Bundle(); 
page.putString("url", url); 
fragments.add(Fragment.instantiate(this,MyFragment.class.getName(),page)); 

//after adding all the fragments write the below lines 

this.mPagerAdapter = new PagerAdapter(super.getSupportFragmentManager(), fragments); 

mPager.setAdapter(this.mPagerAdapter); 

樣品片段定義:

public class MyFragment extends Fragment { 


public static MyFragment newInstance(String imageUrl) { 

final MyFragment mf = new MyFragment(); 

    final Bundle args = new Bundle(); 
    args.putString("somedata", "somedata"); 
    mf.setArguments(args); 

    return mf; 
} 

public MyFragment() {} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    String data = getArguments().getString("somedata"); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    // Inflate and locate the main ImageView 
    final View v = inflater.inflate(R.layout.my_fragment_view, container, false); 
    //... 
    return v; 
} 

FragmentPagerAdapter

public class MyFragmentAdapter extends FragmentPagerAdapter { 

public static int pos = 0; 

private List<Fragment> myFragments; 

public MyFragmentAdapter(FragmentManager fm, List<Fragment> myFrags) { 
    super(fm); 
    myFragments = myFrags; 
} 

@Override 
public Fragment getItem(int position) { 

    return myFragments.get(position); 

} 

@Override 
public int getCount() { 

    return myFragments.size(); 
} 

@Override 
public CharSequence getPageTitle(int position) { 

    setPos(position); 

    String PageTitle = ""; 

    switch(pos) 
    { 
     case 0: 
       PageTitle = "page 1"; 
       break; 
     case 1: 
       PageTitle = "page 2"; 
       break; 
     case 2: 
       PageTitle = "page 3"; 
       break; 
     case 3: 
       PageTitle = "page 4"; 
       break; 
     case 4: 
       PageTitle = "page 5"; 
       break; 
     case 5: 
       PageTitle = "page 6"; 
       break; 
     case 6: 
       PageTitle = "page 7"; 
       break; 
    } 
    return PageTitle; 
} 

public static int getPos() { 
    return pos; 
} 

public static void setPos(int pos) { 
    MyFragmentAdapter.pos = pos; 
} 
} 
+0

嗨Santhosh。這有助於我理解如何更容易地向我的當前適配器添加片段!我可以添加一個片段,但它只是將我添加的片段視爲我可以滑過的另一個頁面。如果我滑動到不同的選項卡,我希望我添加的「狀態欄」片段保留在頂部或底部,無論我刷什麼頁。本質上,狀態欄就像一個子操作欄。只需讓我知道用戶正在進行的操作狀態。 我需要重新策劃我的策略嗎? – CREW 2013-04-26 11:14:26

+0

片段被添加到視圖尋呼機。我認爲你可以爲片段活動創建一個佈局(linearlayout [vertical]),其頂部爲 fragment_container,然後爲其下的viewpager。 – SKK 2013-04-26 11:31:58

相關問題