Obtenir Fragment par Tag

Je suis à l'aide d'un FragmentPagerAdapter pour créer un multi-pages de l'INTERFACE utilisateur avec les différents fragments. Ce que je veux faire est de trouver le Fragment à l'aide de la position du Fragment.

J'ai appliqué la méthode de trouver le nom de fragments et de les utiliser .FindFragmentbyTag (), mais l' .FindFragmentbyTag toujours me rendre la valeur null. La structure semble être correct donc je ne sais pas pourquoi j'obtiens des valeurs null, s'il vous plaît regarder à travers et l'aide est appréciée.

Voici le code

MainActivity.java
public void onCreate(Bundle savedInstanceState) {
    this.getSupportFragmentManager();
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    MainActivity.instance=this;
    //Initialize pager
    vpPager = (ViewPager)findViewById(R.id.mypager);
    pagerAdapter = new MyPagerAdapter(getSupportFragmentManager());
    vpPager.setAdapter(pagerAdapter);
    this.mapFragment = (MapFragment)this.findFragmentByPosition(0);
    this.drFragment = (DRFragment)this.findFragmentByPosition(1);
    this.sensorFragment = (SensorFragment)this.findFragmentByPosition(2);
    ......
}

protected Fragment  findFragmentByPosition(int position) {
    int pagerid = this.vpPager.getId();
    long pagerAdapterid = this.pagerAdapter.getItemId(position);
    return getSupportFragmentManager().findFragmentByTag("android:switcher:" + pagerid + ":" + pagerAdapterid + "");
}

MyPagerAdapter.java
import android.os.Parcelable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.view.View;
public class MyPagerAdapter extends FragmentPagerAdapter {
private static final String TAG = "TM_PageAdapter";
private static int numItems = 3;
public MyPagerAdapter(FragmentManager fragmentManager){
super(fragmentManager);
}
public int getCount() {
return numItems;
}
@Override
public Fragment getItem(int position) {
switch(position){
case 0:
return MapFragment.newInstance(0, "Map Information");
case 1:
return DRFragment.newInstance(1, "DR Information");
case 2: 
return SensorFragment.newInstance(2, "Sensor Information");
default: 
return null;
}
}
@Override
public CharSequence getPageTitle(int position) {
switch(position){
case 0:
return "Map Information";
case 1:
return "DR Information";
case 2: 
return "Sensor Information";
default:
return null;
}
}
public static String makeFragmentName(int viewId, int index) {
return "android:switcher:" + viewId + ":" + index;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == ((View) arg1);
}
@Override
public Parcelable saveState() {
return null;
}

Ici est celui du code de la .newInstance:

public static MapFragment newInstance(int position, String title){
MapFragment mapFragment = new MapFragment();
Bundle args = new Bundle();
args.putInt("current_page", 0);
args.putString("page_tile", "Map Information");
mapFragment.setArguments(args);
return mapFragment;
}
Je ne vois pas ce que vous les appelez makeFragmentName(...) n'importe où. Pouvez-vous donner un code comme le contenu de MapFragment.newInstance(...)?
J'ai ajouté le code de la partie .newInstnce, C'est ma première fois de travailler avec FragmentPagerAdapter donc j'ai plutôt tendance à suivre le tutoriel en ligne. Je risque de manquer une partie importante (je ne soupçonnais). Montrez-moi où je m'ennuie, je vous remercie 🙂
De ce que je vois, vous n'appelez pas la makeFragmentName(), de sorte que les fragments n'aurez pas de balises. C'est une raison pour laquelle findFragmentByTag() n'en trouverez pas. Aussi, vous n'avez pas à ajouter de la viewId à la balise. Juste l'index devrait être suffisant.
Voici ce que j'ai reçu de l'autre post: stackoverflow.com/questions/11976397/... Les Fragments fournis par le FragmentPagerAdapter sont auto-tagged quand ils sont instanciés. Vous pouvez récupérer le tag avec cette méthode: .... N'est donc pas la fonction findFragmentbyPosition(position) dans le MainActivity faire l'affaire? Je pense que j'ai appliqué à la fois de la réponse sur cette page et j'ai oublié de supprimer un
et ThomasDang, semble que le problème était ailleurs, débarrassons-nous de tous ces commentaires inutiles.

OriginalL'auteur Thomas Dang | 2014-07-17