2016-07-22 7 views
1

ViewPagerに複数のフラグメントがあります。どのようにして最初のEditTextデータをフラグメントから最後のフラグメントにすることができますか?今First FragmentからLast Fragmentへのデータの取得方法は?

txtConsAcNo.setText(account_no); 
txtMeterSrMo.setText(mtr_serial_no); 

私は私がすることを望むものを今below-

ConDetFirstFragment f1 = new ConDetFirstFragment(); 
txtConsAcNo = f1.txtConsAcNo.getText().toString(); 
txtMeterSrMo = f1.txtMeterSrMo.getText().toString(); 

ように私の最後のフラグメントにこのtxtConsAcNo、txtMeterSrMo値を取得しています - 私は以下のように私の最初のフラグメントに値を設定している

私はNull値を取得していると私のアプリは残念ながら停止します。私はこのデータを束なしで最後の断片にしたいと思っています。どうすればこれを達成できますか?

答えて

1

をインターフェイス、バンドルまたは意図を作成せずにこれを達成するのは非常に簡単 -

私はすべて宣言していますすべてのフラグメントの変数 "Public Static"は下のように -

任意のフラグメントに私は今、私は

public static void getalldata(){ 
     ConDetFirstFragment f1 = new ConDetFirstFragment(); 
     txtConsAcNo = f1.txtConsAcNo.getText().toString(); 
     txtMeterSrMo = f1.txtMeterSrMo.getText().toString(); 
} 

ハッピーコーディングbelow-上記の変数に最初のフラグメントから値を取得する関数を作成しました

public static String txtConsAcNo,txtMeterSrMo; 

below-のようなデータを取得するために、変数を宣言しています...私は以下のあなたが表示されますよう Publisher/Subscriberのような最適に動作することが証明されているデザインパターンを使用しようと、しっかりとあなたのプロジェクトのコードを結合避けるため

+0

これが最善の方法ですか?あなたのクラスはタイトなカップリング – Eenvincible

+0

を持っているので、このような参考文献を保つことは、これは簡単で、最善の方法だと確信しています... –

+0

他の人に役立ちます。 –

0

問題のカップルがここにあります

  1. 最初のフラグメントは、メモリを節約するには、Androidシステムによって破壊された可能性があります。
  2. あなたの破片はあなたが必要なものを達成するために相互に直接

話をしてはならない、あなたはいくつかのフープを介してジャンプする必要があります。ソーステキストは、(ユーザによってすなわち編集可能)のEditTextオブジェクトであると仮定すると

  1. 、その後のEditTextオブジェクトの各々にTextWatcherを加えます。

  2. インターフェイスを作成する:

    public interface TextPurveyor { 
        void setText1(String t); 
        String getText1(); 
        void setText2(String t); 
        String getText1(); 
    } 
    
  3. ホストアクティビティにこのインタフェースを実装します。アクティビティにローカルにテキスト値を保存します。アクティビティ状態の残りの部分を保存/復元することを忘れないでください。

  4. TextWatcherオブジェクトはホスト活性に適切なのsetText(...)メソッドを呼び出すメイク:

    ((TextPurveyor)getActivity()).setText1(...); 
    
  5. ホスト活性は、このメソッドを実装する各フラグメントのチェックを行います。

  6. 第2のフラグメントは、文字列を望んでいる場合は、そのための活動を尋ねる:

    ((TextPurveyor)getActivity()).getText1(); 
    
0

私はいつも私の中で使用されている人気のライブラリがありますEventBusと呼ばれるプロジェクト - ちょうどあなたのbuild.gradle(モジュールレベル)に以下を追加し、依存関係の下でファイル:

第二
compile 'org.greenrobot:eventbus:3.0.0' 

、あなたのイベントを表現するために、単純なPlain Old Java Object (POJO)を作成します。

public class FragmentAToLastEvent{ 
    private String txtConsAcNo; 
    private String txtMeterSrMo; 

    FragmentAToLastEvent(String acNo, String srMO){ 
     this.txtConsAcNo = acNO; 
     this.txtMeterSrMo = srMO; 
    } 

    //getters and setters if needed 
    public String gettxtConsAcNo(){ 
     return txtConsAcNo; 
    } 

    public String gettxtMeterSrMo(){ 
     return txtMeterSrMo; 
    } 
} 

次のステップは、実際にここにあなたのEventクラスを使用することです:

だから、あなたは、単にこれを行う、EditTextからテキストを送信するあなたのフラグメントに:あなたの最後の断片で

String txtConsAcNo = f1.txtConsAcNo.getText().toString(); 
String txtMeterSrMo = f1.txtMeterSrMo.getText().toString(); 
EventBus.getDefault().post(new FragmentAToLastEvent(txtConsAcNo, txtMeterSrMo)); 

onCreateたり、断片のonAttach内側:単純に完了するために、これを行う

//register your event - making this class a subscriber 
EventBus.getDefault().register(this) 

//next, override a single method to receive the values you passed from above code (Fragment 1?) 

public void onEvent(FragmentAToLastEvent event){ 

    String txtConsAcNo = event.gettxtConsAcNo(); 
    String txtMeterSrMo = event.gettxtMeterSrMo(); 

    //now you can use your text here without problems! 
} 

最後に、onDestroy内部で登録を解除することを忘れないでください:

@Override 
public void onDestroy(){ 
    super.onDestroy(); 

    EventBus.getDefault().unregister(this); 
} 

これはあなたの破片が実装し、すべてのことを行う必要がありますインターフェイスを使用せずに、私は常に行っているし、それがクリーンであるものです!

私はあなたと幸運に役立つと思います!

関連する問題