2017-02-21 3 views
-3

ビューページャーが開始されたアクティビティからボタンを押したときに、あるフラグメントから別のフラグメントにデータを渡すにはどうすればよいですか。View Pagerでフラグメント間でデータをやりとりする方法

activity_main.xml

<android.support.v4.view.ViewPager 
     android:elevation="@dimen/activity_horizontal_margin" 
     android:id="@+id/view_pager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
    </android.support.v4.view.ViewPager> 


    <Button 
     android:id="@+id/btn_next" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:background="@null" 
     android:text="@string/next" 
     android:textColor="@android:color/white" /> 

私はbtn_next押したときに、次のフラグメントが表示されます。以前のフラグメントから現在のフラグメントにデータをフェッチする方法はありますか?

私は1つの断片持っている:私は別のフラグメントに収縮期値にアクセスしたいだけ明確にするため

public class BpDetails extends Fragment { 

     private int page; 

    private EditText systolic; 
    private EditText diastolic; 

    // newInstance constructor for creating fragment with arguments 
     public static BpDetails newInstance(int page) { 
      BpDetails fragmentFirst = new BpDetails(); 
      Bundle args = new Bundle(); 
      args.putInt("someInt", page); 
      fragmentFirst.setArguments(args); 
      return fragmentFirst; 
     } 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      page = getArguments().getInt("someInt", 0); 
     } 


     // Inflate the view for the fragment based on layout XML 
     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      final View view = inflater.inflate(R.layout.bp_details, container, false); 

      Log.i("View ",view.toString()); 


      systolic =(EditText) view.findViewById(R.id.systolic); 
      diastolic =(EditText) view.findViewById(R.id.diastolic); 


      return view; 
     } 
} 

とページアダプター

public static class MyPagerAdapter extends FragmentPagerAdapter { 
     private static int NUM_ITEMS = 4; 
     private static int mSelectedPosition; 

     public MyPagerAdapter(FragmentManager fragmentManager) { 
      super(fragmentManager); 
      //mSelectedPosition=selectedPosition; 
     } 

     // Returns total number of pages 
     @Override 
     public int getCount() { 
      return NUM_ITEMS; 
     } 

     // Returns the fragment to display for that page 
     @Override 
     public Fragment getItem(int position) { 
      switch (position) { 
       case 0: // Fragment # 0 - This will show FirstFragment 
        return BasicDetails.newInstance(0); 
       case 1: 
        return BpDetails.newInstance(1); 
       case 2: 
        return BslDetails.newInstance(2); 
       case 3: 
        return Summary.newInstance(3); 

       default: 
        return null; 
      } 
     } 

    } 

の際に活動中btn_next上のユーザーがクリック。

アップデート:私は断片にこのよう をしようとしている

public String getSystolic(){ 

      return this.systolic.getText().toString(); 

     } 

は、次のユーザーがボタンをクリック

Fragment bpFragment=adapterViewPager.getItem(vpPager.getCurrentItem()); 

        if (bpFragment instanceof BpDetails){ 

         System.out.println("Current item is "+vpPager.getCurrentItem()); 

         Fragment f=adapterViewPager.getInstantiatedFragment(vpPager.getCurrentItem()); 


         BpDetails fr = (BpDetails)adapterViewPager.getItem(vpPager.getCurrentItem()); 

         String systolicString = fr.getSystolic(); 

         Log.i("Systolic is ",systolicString); 
        } 
+0

http://stackoverflow.com/questions/16036572/how-to-pass-values-between-fragmentsこのリンクを参照すると、わかりやすくなります – KrishnaJ

+0

http://stackoverflow.com/a/39252949/4387357 –

+0

@KrishnaJあなたが投稿したリンクは、あるフラグメントのボタンを押すと、あるフラグメントから別のフラグメントにデータを送信することを話しています。私の場合、フラグメントにはトリガーポイントはありません。私は主な活動だけでそれを行う必要があります。 –

答えて

0

TargetフラグメントのソースフラグメントとsetDataメソッドでpublic getDataメソッドを実装します。次のボタンのクリックで

、現在表示さの断片を見つけ、そのフラグメント getSupportFragmentManager(からデータを取得)findFragmentByTag( "アンドロイド:スイッチャー:"。。+ getViewPager()のgetId()+ ":" + fragmentPagerAdapter.getItemId(位置));次のフラグメントとonPageSelected方法次の表示の断片を見つけて、データセットへの移動後に

は彼らの

+0

ターゲットフラグメントにはset textが含まれているので、setDataメソッドを呼び出す方法はありません。ユーザーが編集テキストをタッチまたはクリックしたときに呼び出すと、ほとんどの場合、現在の値は取得されません。 @Hiren。あなたは私の問題を抱えていますか? –

+0

@AnkurKhandelwalはまず、BpDetailsフラグメントから収縮期値を取得し、その後、ViewPagerのsetCurrentItemメソッドを使用して次のフラグメントに移動します。 onPageSelectedメソッドで次のフラグメントインスタンスと値を取得します –

+0

それは私が収縮期の値を得ることができない問題です。 edittextだけが存在するため、ユーザーはデータを入力してもしなくてもよい。ユーザーが次のボタンを押すと、私は収縮期のデータを得ることができますが、この断片の外側は収縮期の変数にアクセスできません。 @Hirenにアクセスする方法はありますか? –

0

活動するとき:

FirstFragment.newInstance(0, "Page # 1"); 

かけら:詳細については

public static FirstFragment newInstance(int page, String title) { 
    FirstFragment fragmentFirst = new FirstFragment(); 
    Bundle args = new Bundle(); 
    args.putInt("someInt", page); 
    args.putString("someTitle", title); 
    fragmentFirst.setArguments(args); 
    return fragmentFirst; 
} 

は、リンクを参照してください。https://guides.codepath.com/android/ViewPager-with-FragmentPagerAdapter

+0

このようにして、私はviewpagerアクティビティからのデータをフラグメントに渡すことしかできません。最初の方法を使用している場合、ビューページャアクティビティ –

0

putArgumentsオンOnScrollChangeListenerおよびgetArguments他のフラグメント。

たりも

LocalBroadCastViewPagerに別のフラグメントからのデータを送信するために使用することができます。

+0

のフラグメントデータはわかりません。ビュー・ページャー・アクティビティーでフラグメントのIDを取得する方法を教えてください。 –

+0

は、ViewPagerAdapterの位置からフラグメントを取得するだけです。 – LearnPainLess

+0

アダプターとフラグメントで質問を更新しました。あなたは私のコードを助けてくれますか?私は取得していません。そのために残念。アクティビティの –

0

これを行うための最も簡単な方法はEventBusライブラリを使用しています。

関連する問題