2013-04-04 140 views
13

我試圖做一個具有滑動導航類型的應用程序。 這是多遠我已經:Android滑動,使用ViewPager沒有標籤

片段活動:

package com.app.BoomBase; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class Fragment_control extends Fragment { 

String tag = this.getClass().getSimpleName(); 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    Log.i(tag, "onCreate"); 
    super.onCreate(savedInstanceState); 
    /** Getting the arguments to the Bundle object */ 
    Bundle data = getArguments(); 

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    Log.i(tag, "onCreateView"); 

    View view = inflater.inflate(R.layout.fragment_controle,container, false); 

    return view; 
    } 

    } 

FragmentPageAdapter:

package com.app.BoomBase; 

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

    public class Fragment_Pager extends FragmentPagerAdapter { 

final int PAGE_COUNT = 3; 
public Fragment_Pager(FragmentManager fm) { 
    super(fm); 
    // TODO Auto-generated constructor stub 
} 

@Override 
public Fragment getItem(int arg0) { 

    Fragment_control myFragment = new Fragment_control(); 
    Bundle data = new Bundle(); 
    data.putInt("current_page", arg0+1); 
    myFragment.setArguments(data); 
    return myFragment; 

} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return PAGE_COUNT; 
} 

} 

MainActivity:

package com.app.BoomBase; 

import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.view.ViewPager; 
import android.util.Log; 
import android.view.Menu; 

public class MainActivity extends FragmentActivity { 

String tag = this.getClass().getSimpleName(); 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    Log.i(tag, "onCreate"); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    /** Getting a reference to the ViewPager defined the layout file */ 
    ViewPager pager = (ViewPager) findViewById(R.id.pager); 

    /** Getting fragment manager */ 
    FragmentManager fm = getSupportFragmentManager(); 

    /** Instantiating FragmentPagerAdapter */ 
    Fragment_Pager pagerAdapter = new Fragment_Pager(fm); 

    /** Setting the pagerAdapter to the pager object */ 
    pager.setAdapter(pagerAdapter); 

} 
} 

但我的問題是,我不能弄清楚如何在代碼中添加片段。我想滑動到下一個按鈕和他們的東西的活動。我怎麼做 ?

+0

https://androidbeasts.wordpress.com/2015/08/11/tabs-with-swipe-views/#more-79 – Aakash 2015-08-11 23:11:48

回答

15

PageAdapter使用您的getItem()Fragments之間切換,這是您要聲明哪個頁面做什麼的位置。 「Position」0是第一頁,1是第二個等等。您可以簡單地返回其他Fragments的新實例,或者根據需要傳遞參數。

例如:

@Override 
public Fragment getItem(int position) { 
    switch (position) { 
    case 0: 
     // Your current main fragment showing how to send arguments to fragment 
     Fragment_control myFragment = new Fragment_control(); 
     Bundle data = new Bundle(); 
     data.putInt("current_page", position+1); 
     myFragment.setArguments(data); 
     return myFragment; 
    case 1: 
     // Calling a Fragment without sending arguments 
     return new MySecondFragment(); 
    case 2: 
     return new MyThirdFragment(); 
    default: 
     return null; 
    } 
} 

然後,你將創建一個Fragment類爲每個要合併的。在我的例子中,你將有MySecondFragment和一類MyThirdFragment

public class MySecondFragment extends Fragment { 

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

} 

而且

public class MyThirdFragment extends Fragment { 

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

} 

任何片段可能僅僅擡高標準的XML佈局文件,訪問孩子在佈局你會必須記住使用以下內容,我將以MySecondFragment爲例。

比方說,你有兩個Buttons有ID的R.id.button1R.id.button2在題爲 'second_fragment' 佈局文件:

public class MySecondFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.second_fragment, null); 

     // Make sure to add the parent inflater before and layout child call 
     Button btn_one = (Button)view.findViewById(R.id.button1); 
     Button btn_two = (Button)view.findViewById(R.id.button2); 

     return view; 
    } 

} 

編輯

要在其他頁面上啓動,然後0或在MainAvticity中,您可以簡單地使用setCurrentItem(),如下所示:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    Log.i(tag, "onCreate"); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    ViewPager pager = (ViewPager) findViewById(R.id.pager); 
    FragmentManager fm = getSupportFragmentManager(); 
    Fragment_Pager pagerAdapter = new Fragment_Pager(fm); 
    // Here you would declare which page to visit on creation 
    pager.setAdapter(pagerAdapter); 
    pager.setCurrentItem(1); 

} 
+1

非常感謝!我一直在尋找2天,爲我的問題的解決方案! :) – Lasse 2013-04-04 13:32:25

+1

很高興我能幫忙,祝你好運! – jnthnjns 2013-04-04 13:33:19

+1

謝謝,你也是:-) – Lasse 2013-04-04 13:57:03

0

我在片段類添加這個..

我得到這個問題是無法解決無法解決獲得支持片段管理器()。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
Log.i(tag, "onCreate"); 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 

ViewPager pager = (ViewPager) findViewById(R.id.pager); 
FragmentManager fm = getSupportFragmentManager(); 
Fragment_Pager pagerAdapter = new Fragment_Pager(fm); 
// Here you would declare which page to visit on creation 
pager.setAdapter(pagerAdapter); 
pager.setCurrentItem(1); 

} 
相關問題