2013-04-04 5 views
13

Im пытается создать приложение, которое имеет тип навигации для прокрутки. Это как далеко я пошел:Android swiping, используя 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

ответ

15

PageAdapter использует getItem() для переключения между Fragments, здесь вы должны объявить, какая страница что-то делает. «Позиция» 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 с идентификаторами R.id.button1 и R.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; 
    } 

} 

Edit

Чтобы начать на странице другого, то 0 или в первой позиции вы просто использовали бы setCurrentItem() в своем MainAvticity, например:

@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

+1

Рад, что я могу помочь, удачи! – jnthnjns

+1

спасибо и вам тоже :-) – Lasse

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

} 
Смежные вопросы