2017-10-11 98 views
0

我正在使用選項卡式活動。我在第一個標籤中使用了一個按鈕,在按鈕上點擊它應該到第二個標籤。如何實現意圖從另一個片段調用片段

如何使用意圖從第一片段調用第二片段?

這是我的兩個片段的代碼。

第一塊碎片:

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

第二塊碎片:

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'是一個'Fragment',你應該用'FragmentManager'用'ShippingFragment'代替它 –

+0

轉到這個鏈接[https://stackoverflow.com/a/25945639/7226732] – Mohammad

回答

0

您無法調用意圖調用片段。 如果您想添加片段,您必須使用此代碼。

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,則必須使用它。


當你想更換Fragment,使用FragmentManagerFragmentTransaction

// 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

爲了讓您的用戶界面更具互動性和美觀,我將分享我已經實施的內容。

只要從片段的java文件訪問您的viewPager,請在標籤活動中聲明viewPager

public static ViewPager viewPager; 

然後在按鈕的onClick方法或onClickListener,你可以用這個。

TabbedActivity.viewPager.arrowScroll(View.FOCUS_RIGHT); 

這將平滑滾動你的viewpager的支付活動,是的,如果你想從滾動直接可以禁用viewPager的滾動限制用戶,閱讀here

但是,只有在標籤活動中的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; 
     } 

您也可以重點轉移到左邊,如果用戶想通過剛纔

TabbedActivity.viewPager.arrowScroll(View.FOCUS_LEFT); 

回去ShippingFragment是的,它的工作,因爲我第一次測試發帖應答之前,我傻。

相關問題