2013-04-04 16 views
13

Sto tentando di creare un'app con il tipo di navigazione scorretto. Questo è fino a che punto sono andato:Scorrimento Android, utilizzando ViewPager senza schede

attività Frammento:

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

} 
} 

Ma il mio problema è che non riesco a capire come aggiungere frammenti al codice. Voglio passare alla prossima attività con pulsanti e elementi su di essi. Come lo faccio ?

+0

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

risposta

15

PageAdapter utilizza il tuo getItem() per passare da Fragments, questo è dove si dichiarerà quale pagina fa cosa. "Posizione" 0 è la prima pagina, 1 è la seconda e così via. Puoi semplicemente restituire una nuova istanza dell'altro Fragments o passare argomenti se lo desideri.

Ad esempio:

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

allora si sarebbe creare una classe Fragment per ciascuno di quelli che si desidera inserire. Nel mio caso si ha una classe per MySecondFragment e 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; 
    } 

} 

E

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

} 

Ogni frammento può semplicemente gonfiare un file di layout XML standard, per accedere ai figli nel layout si farebbe devo ricordare di usare il seguente, userò MySecondFragment come esempio.

Diciamo che avete due Buttons con id di R.id.button1 e R.id.button2 in un file di layout dal titolo '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; 
    } 

} 

Modifica

Per iniziare ad una pagina diversa allora 0 o la prima posizione che useresti semplicemente setCurrentItem() nel tuo MainAvticity, in questo modo:

@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

Grazie mille! Ho cercato in giro per 2 giorni, per una soluzione al mio problema! :) – Lasse

+1

Felice di poterti aiutare, buona fortuna! – jnthnjns

+1

grazie e anche a te :-) – Lasse

0

Ho aggiunto questa in classe frammento ..

il problema che ho ottenuto non è in grado di risolvere non può risolvere ottenere direttore frammento di supporto().

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

} 
Problemi correlati