2017-10-11 6 views
0

J'utilise l'utilisation d'onglets. J'ai utilisé un bouton dans le premier onglet pour lequel sur le bouton cliquez sur le deuxième onglet. Comment utiliser l'intention pour appeler le second fragment du premier fragment?Comment implémenter l'intention d'appeler un fragment d'un autre fragment

Voici le code de mes deux fragments.

Première Fragment:

package com.touchsmart.spectacular.ui.Fragments; 

import.... 

public class ShippingFragment extends Fragment { 

    private LinearLayout addnew; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    //returning our layout file 

    View view = inflater.inflate(R.layout.fragment_shipping, container, false); 

    addnew = (LinearLayout) view.findViewById(R.id.addnew); 

    addnew.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(getActivity(),PaymentFragment.class); 
      startActivity(i); 
     } 
    }); 


    return view; 
} 

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    //you can set the title for your toolbar here for different fragments different titles 
    getActivity().setTitle("Check Out"); 
} 
} 

Deuxième Fragment:

package com.touchsmart.spectacular.ui.Fragments; 

import... 

public class PaymentFragment extends Fragment{ 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     //returning our layout file 
    View view = inflater.inflate(R.layout.fragment_payment, container, false); 

    return view; 
    } 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    //you can set the title for your toolbar here for different fragments different titles 
    getActivity().setTitle("Check Out"); 
    } 
    } 

Le code que je me sers montre maintenant l'erreur suivante sur en cliquant sur le premier bouton:

FATAL EXCEPTION: main Process: com.touchsmart.spectacular, PID: 18942 
    android.content.ActivityNotFoundException: Unable to find explicit activity class {com.touchsmart.spectacular/com.touchsmart.spectacular.ui.Fragments.PaymentFragment}; have you declared this activity in your AndroidManifest.xml? 
    at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1805) 
    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1523) 
    at android.app.Activity.startActivityForResult(Activity.java:4225) 
    at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:50) 
    at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:79) 
    at android.support.v4.app.ActivityCompatJB.startActivityForResult(ActivityCompatJB.java:30) 
    at android.support.v4.app.ActivityCompat.startActivityForResult(ActivityCompat.java:146) 
    at android.support.v4.app.FragmentActivity.startActivityFromFragment(FragmentActivity.java:932) 
    at android.support.v4.app.FragmentActivity$HostCallbacks.onStartActivityFromFragment(FragmentActivity.java:1047) 
    at android.support.v4.app.Fragment.startActivity(Fragment.java:944) 
    at android.support.v4.app.Fragment.startActivity(Fragment.java:933) 
    at com.touchsmart.spectacular.ui.Fragments.ShippingFragment$1.onClick(ShippingFragment.java:36) 
    at android.view.View.performClick(View.java:5637) 
    at android.view.View$PerformClick.run(View.java:22429) 
    at android.os.Handler.handleCallback(Handler.java:751) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6119) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

n'importe qui fournissent moi une solution pour passer à travers ce.Merci ..

+0

'PaymentFragment' est un' Fragment' vous devez le remplacer par '' l'aide ShippingFragment' FragmentManager' –

+0

aller à ce lien [https://stackoverflow.com/a/25945639/7226732] – Mohammad

Répondre

0

Vous ne pouvez pas appeler le fragment d'intention d'appel. Vous devez utiliser ce code si vous souhaitez ajouter un fragment.

getSupportFragmentManager().beginTransaction().add(R.id.frameLayout, fragment).commit(); 

Ou si vous voulez remplacer fragment

getSupportFragmentManager().beginTransaction().replace(R.id.frameLayout, fragment).commit(); 
0
Intent i = new Intent(getActivity(), PaymentFragment.class); 
startActivity(i); 

Il ne peut pas travailler et commencer à Fragment en utilisant startActivity(). vous devez l'utiliser lorsque vous voulez changer seulement Activity.


Lorsque vous voulez remplacer Fragment, utilisez FragmentManager et FragmentTransaction.

// Create fragment and give it an argument specifying the article it should show 
ArticleFragment newFragment = new ArticleFragment(); 
Bundle args = new Bundle(); 
args.putInt(ArticleFragment.ARG_POSITION, position); 
newFragment.setArguments(args); 

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 

// Replace whatever is in the fragment_container view with this fragment, 
// and add the transaction to the back stack so the user can navigate back 
transaction.replace(R.id.fragment_container, newFragment); 
transaction.addToBackStack(null); 

// Commit the transaction 
transaction.commit(); 

S'il vous plaît lire cette Replace One Fragment with Another, il sera utile pour vous.

0

Juste pour rendre votre interface plus interactive et beau, je vais partager ce que j'ai mis en œuvre. Pour accéder à votre viewPager à partir du fichier java du fragment, déclarez votre viewPager comme ci-dessous dans votre activité à onglets.

public static ViewPager viewPager; 

Ensuite, dans la méthode onClick ou onClickListener d'un bouton, vous pouvez simplement utiliser.

TabbedActivity.viewPager.arrowScroll(View.FOCUS_RIGHT); 

Cela facilitera votre viewpager faire défiler à l'activité de paiement, et oui, si vous voulez limiter l'utilisateur de défilement, vous pouvez directement désactiver le défilement de viewPager, lisez here.

Mais cela ne fonctionne que si vous avez implémenté les fragments comme ci-dessous dans l'activité tabulée FragmentAdapter.

@Override 
     public android.support.v4.app.Fragment getItem(int position) { 
      switch (position) { 
       case 0: 
        return new ShippingFragment(); 
       case 1: 
        return new PaymentFragment(); 

      } 
      return null; 
     } 

Vous pouvez également déplacer le focus à gauche si l'utilisateur veut revenir à ShippingFragment par juste

TabbedActivity.viewPager.arrowScroll(View.FOCUS_LEFT); 

Et oui, cela fonctionne comme je premier test avant des réponses affichant, silly me.