web-dev-qa-db-fra.com

Glissement Android, en utilisant ViewPager sans onglets

J'essaie de faire une application qui a le type de navigation glisser. Voici à quel point je suis allé: 

Activité de fragment: 

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

}

Activité principale: 

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

}
}

Mais mon problème est que je ne peux pas comprendre comment ajouter des fragments au code. Je veux passer à l'activité suivante avec des boutons et des choses dessus. Comment je fais ça ? 

14
Lasse

PageAdapter utilise votre getItem() pour basculer entre Fragments, c’est ici que vous déclareriez quelle page fait quoi. "Position" 0 est la première page, 1 est la deuxième et ainsi de suite. Vous pouvez simplement renvoyer une nouvelle instance de votre autre variable Fragments ou passer des arguments si vous le souhaitez.

Par exemple:

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

Ensuite, vous créerez une classe Fragment pour chacun de ceux que vous souhaitez incorporer. Dans mon exemple, vous auriez une classe pour MySecondFragment et 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;
    }

}

Et

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

}

Tout fragment peut simplement gonfler un fichier de mise en page XML standard. Pour accéder aux enfants de la mise en page, vous devez vous rappeler d’utiliser ce qui suit. Je vais utiliser MySecondFragment comme exemple.

Supposons que vous avez deux Buttons avec R.id.button1 et R.id.button2 dans un fichier de mise en page intitulé '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;
    }

}

Modifier

Pour commencer sur une page autre que 0 ou la première position, vous utiliseriez simplement setCurrentItem() dans votre MainAvticity, comme suit:

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

}
15
jnthnjns

J'ai ajouté ceci dans la classe fragment.

le problème que j'ai eu est impossible à résoudre impossible à résoudre obtenir le support fragment manager ().

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

}
0
user271805