2017-05-16 15 views
0

2つのフラグメントを含むアクティビティ "MainActivity"があります。 Fragment1にはEditTextとボタンがあります。ユーザーがボタンを押すと、EditText内のテキストがTextViewだけを持つFragment2に送られます。しかし私は、Fragment1のEditTextからFragment2のTextViewにテキストを送る方法を考え出すことはできません。誰かが助けることができたら?感謝。おかげ Fragment11つのフラグメントから別のフラグメントにテキストビューを更新するには

package org.pctechtips.myfragmentapp; 


/** 
* Created by george on 5/16/17. 
*/ 

public class ButtonFragment extends Fragment { 

    Button bt; 
    EditText editText; 
    TextView txtView; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.button_fragment, 
       container, false); 

     txtView = (TextView) view.findViewById(R.id.textView_fragment1); 
     editText = (EditText) view.findViewById(R.id.editText_fragment1); 


     bt = (Button) view.findViewById(R.id.button_fragment1); 
     bt.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       buttonClicked(v); 
      } 
     }); 

     return view; 
    } 

    public void buttonClicked (View view) { 
     .onButtonClick(edittext.getText().toString()); 
    } 

} 

MainActivity

package org.pctechtips.myfragmentapp; 

public class MainActivity extends FragmentActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     /*fragments 1 section*/ 
     FragmentManager fm1 = getFragmentManager(); 
     FragmentTransaction ft1 = fm1.beginTransaction(); 
     ButtonFragment bf = new ButtonFragment(); 
     ft1.add(R.id.button_fragment1, bf); 
     ft1.commit(); 

     /*Fragment 2 section*/ 
     FragmentManager fm2 = getFragmentManager(); 
     FragmentTransaction ft2 = fm2.beginTransaction(); 
     TextviewFragment tf = new TextviewFragment(); 
     ft2.add(R.id.textView_fragment2, tf); 
     ft2.commit(); 

     } 

} 

Fragment2

public class TextviewFragment extends Fragment { 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.text_fragment, container, false); 
    } 
} 
+0

イベントバスを使用して –

答えて

0

は、迅速かつ簡単な答えは、getViewメソッド()を呼び出すことである。活動からfindViewById()(下図のように)。より適切なアプローチは、テキストを取得して取得するインタフェースをフラグメントに与えることです。以下は、すばやく簡単なメソッドのコードですが、Androidスタジオでフラグメントを作成すると、より適切なインターフェースアプローチを行う方法がわかります。

package org.pctechtips.myfragmentapp; 

public class MainActivity extends FragmentActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    /*fragments 1 section*/ 
    FragmentManager fm1 = getFragmentManager(); 
    FragmentTransaction ft1 = fm1.beginTransaction(); 
    ButtonFragment bf = new ButtonFragment(); 
    ft1.add(R.id.button_fragment1, bf); 
    ft1.commit(); 

    /*Fragment 2 section*/ 
    FragmentManager fm2 = getFragmentManager(); 
    FragmentTransaction ft2 = fm2.beginTransaction(); 
    TextviewFragment tf = new TextviewFragment(); 
    ft2.add(R.id.textView_fragment2, tf); 
    ft2.commit(); 

    EditText et = (EditText) ft1.getView().findViewById(YOUR_EDITTEXT_ID); 
    Button button = (Button) ft1.getView().findViewById(YOUR_BUTTON_ID); 
    TextView tv = (TextView) ft2.getView().findViewById(YOUR_TEXTVIEW_ID); 

    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      tv.setText(et.getText();) 
     } 
    }); 
} 
0

いくつかの方法で行うことができます。例えば、Activityによって、Official Docsのように。 ( - あなたのButtonFragment断片B)

public class FragmentB { 

    private void sendMessage() { 
     Intent intent = new Intent("custom-event-name"); 
     intent.putExtra("message", "your message"); 
     LocalBroadcastManager.getInstance(this).sendBroadcast(intent); 
    } 
} 

とメッセージで

がフラグメント受信される(フラグメントを送信するには

:しかし、私はwar_Herothis答えに似LocalBroadcastManagerを経由してブロードキャストメッセージを送信好みますよFRAGMENT A - あなたのTextviewFragment)

public class FragmentA { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     ... 

     // Register receiver 
     LocalBroadcastManager.getInstance(this).registerReceiver(receiver, 
      new IntentFilter("custom-event-name")); 
    } 

// This will be called whenever an Intent with an action named "custom-event-name" is broadcasted. 
    private BroadcastReceiver receiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
     String message = intent.getStringExtra("message"); 
     } 
    }; 
} 

と受信機の登録を解除することを忘れないでください:

protected void onPause() { 
    super.onPause(); 
    LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver); 
} 
関連する問題