2017-10-11 81 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是的,它的工作,因为我第一次测试发帖应答之前,我傻。

相关问题