2017-10-11 18 views
0

タブ付きアクティビティを使用しています。最初のタブのボタンをクリックして、それを2番目のタブに移動する必要があります。インテントを実装して別のフラグメントからフラグメントを呼び出す方法

インテントを使用してファーストフラグメントから2番目のフラグメントを呼び出すにはどうすればよいですか?

ここに私の両方の断片のコードです。

最初のフラグメント:

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

第2のフラグメント:

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

私が今使っているコードは、最初のボタンをクリックで次のエラーを示しています

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) 

誰もが提供私はこれを克服するための解決策です。ありがとう..

+0

は 'PaymentFragment'は'は 'FragmentManager' –

+0

は、このリンクに行く'使用ShippingFragment'でそれを置き換える必要がありFragment' [https://stackoverflow.com/a/25945639/7226732] – Mohammad

答えて

0

Intentを呼び出し元のフラグメントに呼び出すことはできません。 フラグメントを追加する場合は、このコードを使用する必要があります。

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

それとも、フラグメント

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

を交換したい場合はstartActivity()を使用してFragmentを仕事と起動できません。 Activityだけを変更したい場合に使用する必要があります。


あなたはFragmentManagerFragmentTransactionを使用し、Fragmentを交換したいです。

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

これをお読みください。Replace One Fragment with Another、これはお役に立ちます。

0

あなたのUIをよりインタラクティブに見栄えを良くするために、私が実装したことを分かち合いましょう。

フラグメントのJavaファイルからviewPagerにアクセスするには、タブ付きのアクティビティでviewPagerと以下のように宣言してください。

public static ViewPager viewPager; 

次にボタンのonClick方法やonClickListenerで、あなただけのこれを使用することができます。

TabbedActivity.viewPager.arrowScroll(View.FOCUS_RIGHT); 

、これは支払いの活動にごviewpagerをスクロール滑らかになり、あなたが直接スクロールからユーザーを制限したい場合は、はい、あなたはviewPagerのスクロールを無効にすることができhereをお読みください。

ただし、これは、タブ付きアクティビティのFragmentAdapterに以下のようにフラグメントを実装した場合にのみ機能します。ユーザーはちょうど

TabbedActivity.viewPager.arrowScroll(View.FOCUS_LEFT); 

バックShippingFragmentに行きたいとはい場合

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

      } 
      return null; 
     } 

ます。また左にフォーカスをシフトすることができ、それは愚かな私に、答えを投稿する前に私の最初のテストとして働いています。

関連する問題