2017-09-25 1 views
0

J'ai besoin d'implémenter un fragment qui exécute une fonction qui traite des ensembles de données différents et qui nécessite également des fichiers de disposition différents pour rendre plusieurs vues. Je veux implémenter un fragment commun pour toutes les opérations de backend pour les données associées à plusieurs vues de disposition. Comment puis-je le faire?Comment puis-je utiliser plusieurs fichiers de mise en page dans un fragment?

+0

Quelque chose comme, une activité avec plusieurs fichiers de mise en page XML que je peux basculer avec le fichier principal de mise en page xml appropriée – vinitpradhan18

Répondre

0

Au lieu de cela, vous pouvez essayer cette solution

Créer un fragment de base avec toutes les méthodes qui font une tâche commune qui sont nécessaires pour la tâche fragment de i.e. comme vous l'avez mentionné dans les questions (opérations de back-end).

Créez autant de fragments dont vous avez besoin avec des dispositions différentes et étendez le fragment de base.

public class BaseFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
     return super.onCreateView(inflater,container,savedInstanceState); 
    } 
    //Add your backend operations for data and common methods 
} 

public class FragmentA extends BaseFragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    //Add your first layout here 
    } 

} 

public class FragmentB extends BaseFragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    //Add your second layout here 
    } 

} 
+0

Je pense que cela va fonctionner. Je vais essayer de vous le faire savoir. – vinitpradhan18

+0

Cela fonctionnera j'espère..Sachez-moi si vous avez des problèmes – Anonymous

0

Vous pouvez gonflez une mise en page différente en fonction de votre propre conditionnement comme ceci:

View mView; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    if(condition_one()) 
     mView = inflater.inflate(R.layout.condition_one_layout,container,false); 
    else if(condition_two()) 
     mView = inflater.inflate(R.layout.condition_two_layout,container,false); 
. 
. 
. 
    return mView; 
} 
0

La meilleure approche est d'utiliser une seule activité i.e.; Activité principale. Dans cette activité principale, vous pouvez charger plusieurs fragments en fonction de vos données. Laissez-moi vous montrer comment.

Supposons que votre activity_main.xml est:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

    <LinearLayout 
    android:id="@+id/fragment_container" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 

</LinearLayout> 

Cette activité se composent d'une disposition linéaire qui a un fragment à l'intérieur. Maintenant, en fonction de vos données, vous pouvez charger plusieurs fragments dans cette disposition linéaire intérieure.

Dans votre MainActivity.java, vous pouvez charger plusieurs fragments en appliquant chèque:

if(message.contains("first_fragment")) 
{ 
    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 

    final FIRST_FRAGMENT fragment_activity = new FIRST_FRAGMENT(); 

    fragmentTransaction.replace(R.id.fragment_container,fragment_activity,"FIRST FRAGMENT"); 

    fragmentTransaction.commit(); 
} 
else if(message.contains("second_fragment")) 
{ 
    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 

    final SECOND_FRAGMENT fragment_activity = new SECOND_FRAGMENT(); 

    fragmentTransaction.replace(R.id.fragment_container,fragment_activity,"SECOND FRAGMENT"); 

    fragmentTransaction.commit(); 

} 

Voici ce que je l'ai fait est, si votre message a une first_fragment de chaîne, il faut charger FIRST_FRAGMENT. De même, si votre message a une chaîne second_fragment, il doit charger SECOND_FRAGMENT.

Maintenant, le temps de mettre en œuvre votre FIRST_FRAGMENT.java:

public class FIRST_FRAGMENT extends Fragment { 

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

    return inflater.inflate(R.layout.first_fragment, null); 

} 

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 

// buttons or textview of fragment must be initialised here. 

} 

De même, SECOND_FRAGMENT sera le même.

Supposons maintenant si vous voulez vérifier quel fragment est actuellement chargé. Vous pouvez faire comme ceci .:

final FIRST_FRAGMENT myFragment = (FIRST_FRAGMENT) getSupportFragmentManager().findFragmentByTag("FIRST FRAGMENT"); 

if (myFragment != null && myFragment.isVisible()) { 

      myFragment.handleMessage(message); 

      // here handleMessage is the function declared in FIRST_FRAGMENT 
} 
+0

J'utilise déjà une activité de tiroir de navigation. Dans cette activité, j'utilise déjà des fragments pour chaque élément de menu. Maintenant, dans ces fragments, j'ai besoin de mettre en œuvre plusieurs fonctionnalités de mise en page. – vinitpradhan18