2014-09-20 88 views
4

我使用viewpager控件來承載三個片段。我已經在每個片段中放置了一個按鈕去下一個片段。所以我想知道如何從一個片段到另一個使用意圖?使用意圖調用另一個片段的片段

的主要目的是創建一個註冊表單已分爲三名fragments.The代碼如下所示:

主要活動:

package pl.looksok.viewpagerdemo; 

import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.view.ViewPager; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnTouchListener; 

public class MainActivity extends FragmentActivity { 
    ViewPager pager; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     MyPagerAdapter pageAdapter = new MyPagerAdapter(getSupportFragmentManager()); 
     pager = (ViewPager)findViewById(R.id.myViewPager); 
     pager.setAdapter(pageAdapter); 

    } 

} 

第一個片段:

package pl.looksok.viewpagerdemo; 

import android.content.Intent; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.support.v4.app.Fragment; 

public class FragmentBlue extends Fragment { 
Button btnnext1; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.fragment_blue, container, false); 
     btnnext1=(Button) view.findViewById(R.id.btnnext1); 

     btnnext1.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View view) { 
       Intent intent = new Intent(view.getContext(), FragmentGreen.class); 
        view.getContext().startActivity(intent); 
        getActivity().finish(); 

      } 
     }); 

     return view; 
    } 
} 

第二個片段:

package pl.looksok.viewpagerdemo; 

import android.content.Intent; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.support.v4.app.Fragment; 

public class FragmentGreen extends Fragment { 
Button btnnext2; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.fragment_green, container, false); 
     btnnext2=(Button) view.findViewById(R.id.btnnext2); 
     btnnext2.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View view) { 
       Intent intent = new Intent(view.getContext(), FragmentPink.class); 
       view.getContext().startActivity(intent); 
       getActivity().finish(); 

      } 
     }); 
     return view; 
    } 
} 

第三個片段:

package pl.looksok.viewpagerdemo; 

import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.support.v4.app.Fragment; 

public class FragmentPink extends Fragment { 
Button btnnext3; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.fragment_pink, container, false); 
     btnnext3=(Button) view.findViewById(R.id.btnnext3); 
     btnnext3.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 


      } 
     }); 
     return view; 
    } 
} 

爲viewpager適配器:

package pl.looksok.viewpagerdemo; 

import java.util.ArrayList; 
import java.util.List; 

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 

public class MyPagerAdapter extends FragmentPagerAdapter { 

    private List<Fragment> fragments; 

    public MyPagerAdapter(FragmentManager fm) { 
     super(fm); 
     this.fragments = new ArrayList<Fragment>(); 
     fragments.add(new FragmentBlue()); 
     fragments.add(new FragmentGreen()); 
     fragments.add(new FragmentPink()); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return fragments.get(position); 
    } 

    @Override 
    public int getCount() { 
     return fragments.size(); 
    } 
} 

爲viewpager自定義類:

package pl.looksok.viewpagerdemo; 

import android.content.Context; 
import android.support.v4.view.ViewPager; 
import android.util.AttributeSet; 
import android.view.MotionEvent; 

public class CustomViewPager extends ViewPager { 

    private boolean isPagingEnabled = false; 

    public CustomViewPager(Context context) { 
     super(context); 
    } 

    public CustomViewPager(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     return this.isPagingEnabled && super.onTouchEvent(event); 
    } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent event) { 
     return this.isPagingEnabled && super.onInterceptTouchEvent(event); 
    } 

    public void setPagingEnabled(boolean b) { 
     this.isPagingEnabled = b; 
    } 
} 

,我現在使用的代碼顯示了單擊第一個按鈕時出現以下錯誤:

09-20 10:54:18.632: E/AndroidRuntime(9401): FATAL EXCEPTION: main 
09-20 10:54:18.632: E/AndroidRuntime(9401): android.content.ActivityNotFoundException: Unable to find explicit activity class {pl.looksok.viewpagerdemo/pl.looksok.viewpagerdemo.FragmentGreen}; have you declared this activity in your AndroidManifest.xml? 
09-20 10:54:18.632: E/AndroidRuntime(9401):  at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1405) 
09-20 10:54:18.632: E/AndroidRuntime(9401):  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1379) 
09-20 10:54:18.632: E/AndroidRuntime(9401):  at android.app.Activity.startActivityForResult(Activity.java:2827) 
09-20 10:54:18.632: E/AndroidRuntime(9401):  at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:824) 
09-20 10:54:18.632: E/AndroidRuntime(9401):  at android.app.Activity.startActivity(Activity.java:2933) 
09-20 10:54:18.632: E/AndroidRuntime(9401):  at pl.looksok.viewpagerdemo.FragmentBlue$1.onClick(FragmentBlue.java:25) 
09-20 10:54:18.632: E/AndroidRuntime(9401):  at android.view.View.performClick(View.java:2538) 
09-20 10:54:18.632: E/AndroidRuntime(9401):  at android.view.View$PerformClick.run(View.java:9152) 
09-20 10:54:18.632: E/AndroidRuntime(9401):  at android.os.Handler.handleCallback(Handler.java:587) 
09-20 10:54:18.632: E/AndroidRuntime(9401):  at android.os.Handler.dispatchMessage(Handler.java:92) 
09-20 10:54:18.632: E/AndroidRuntime(9401):  at android.os.Looper.loop(Looper.java:130) 
09-20 10:54:18.632: E/AndroidRuntime(9401):  at android.app.ActivityThread.main(ActivityThread.java:3689) 
09-20 10:54:18.632: E/AndroidRuntime(9401):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-20 10:54:18.632: E/AndroidRuntime(9401):  at java.lang.reflect.Method.invoke(Method.java:507) 
09-20 10:54:18.632: E/AndroidRuntime(9401):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 
09-20 10:54:18.632: E/AndroidRuntime(9401):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
09-20 10:54:18.632: E/AndroidRuntime(9401):  at dalvik.system.NativeStart.main(Native Method) 

所以問題是如何在碎片之間使用意圖。是否有更好的方式將註冊表單分成三部分而不使用viewpager?

+0

你在AndroidManifest.xml中聲明瞭這個活動嗎? – prakash 2014-09-20 05:38:09

回答

3

如果所有的片段是相同的ViewPager內,你只是想被導航到該片段,那麼你不需要任何Intents。所有你需要的是:

mViewPager.setCurrentItem(POSITION, true); 

這裏POSITION是一個整數。

現在的觀點尋呼機是ActivityButton裏面Fragment所以你需要做到這一點創建這個方法您的活動中

public void selectFragment(int position){ 
mViewPager.setCurrentItem(position, true); 
// true is to animate the transaction 
} 

,並呼籲像這裏面的你OnClickListener

((MainActivity)getActivity()).selectFragment(POSITION_YOU_WANNA_SELECT); 

希望它有幫助。

+0

我得到的錯誤無效的類型爲方法selectFragment – user3852672 2014-09-20 05:57:07

9

你不能打電話給你的片段像這樣,

Intent intent = new Intent(view.getContext(), FragmentGreen.class); 
    view.getContext().startActivity(intent); 
    getActivity().finish(); 

你需要打電話給你的片段像這樣

FragmentManager fm = getFragmentManager(); 
    FragmentTransaction ft = fm.beginTransaction(); 
    FragmentGreen llf = new FragmentGreen(); 
    ft.replace(R.id.listFragment, llf); 
    ft.commit(); 

Intent基本上是用於從另一個調用一個活動。要添加新的Fragment,您不能使用Intent。爲此,您必須使用FragmentManager和開放片段FragmentTransaction

的更多信息,請到Here

+1

我應該在R.id.listFragment上使用什麼? – user3852672 2014-09-20 05:48:25

+2

listFragment是Fragment容器的ID。因此,您必須在一個xml文件中添加一個FrameLayout,其ID爲listFragment,以便在該佈局中添加片段。 – Piyush 2014-09-20 05:50:10

+1

首先檢查這一個Intent intent = new Intent(view.getContext(),FragmentGreen.class); view.getContext()。startActivity(intent); getActivity()。finish();然後告訴我 – Piyush 2014-09-20 05:55:12

0
FragmentManager fm=getFragmentManager(); 
fm.beginTransaction().replace(R.layout.fragment_blue, (Fragment)new FragmentGreen()).commit(); 
getActivity().getActionBar().setTitle("Home"); 
相關問題