web-dev-qa-db-ja.com

Androidで1つのフラグメントから別のフラグメントに値を渡す方法は?

私はFragmentsの初心者です。あるフラグメントから別のフラグメントに文字列値を渡したい。これを行う方法?フラグメントを次のように呼び出しました。ステップバイステップで私を案内してください。

String cid = id.getText().toString();
Fragment fr = new FriendFragment();
Android.app.FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, fr);
ft.commit(); 
9
user3256145

あなたは以下のようなことをすることができます、

 String cid=id.getText().toString();
 Fragment fr=new friendfragment();
 FragmentManager fm=getFragmentManager();
 Android.app.FragmentTransaction ft=fm.beginTransaction();
 Bundle args = new Bundle();
 args.putString("CID", cid);
 fr.setArguments(args);
 ft.replace(R.id.content_frame, fr);
 ft.commit(); 

データを受信するには、次の手順を実行します。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    String strtext = getArguments().getString("CID");    
    return inflater.inflate(R.layout.fragment, container, false);
}
28
Spring Breaker

フラグメントからアクティビティにデータを送信する場合は、インターフェイスを使用できます。

しかし、フラグメントから別のフラグメントにデータを送信する場合は、複雑になります。データをアクティビティに送信してから、他のフラグメントに送信する必要があります。

私はこの問題を解決するために EventBus を使用します。使い方。

  1. イベントを作成する-E。
  2. フラグメントから-イベントのレジスタ。
  3. フラグメントBから、渡したいデータを含むイベントEを公開します。
  4. Fragment-Aで記述したonEvent()メソッドでデータを取得します。

それでおしまい。独自のインターフェースを作成する必要はありません。

バックグラウンドサービスまたはスレッドからアクティビティへの通信にもイベントバスを使用できます。

EventBus HowTo および Repository もチェックアウトしてください。

6

Fragment to Fragmentの通信は、親アクティビティを介して行う必要があります。

FragmentToSendData

interface <interfaceName>{
    void <abstract method>(String str);
}

@Override
public void onAttach(Activity activity) {
        super.onAttach(activity);
       try{
           <instance of the interface> = (<interface>)getActivity();
       }catch (ClassCastException e) {
           throw new ClassCastException(getActivity().toString()
                   + " must implement <interface>");
       }

    }

ActivityWithBothFragments(これは、ViewPagerを介して行うことも、フラグメントのIDを使用することもできます。findFragmentById()を使用するだけです)

@Override <abstract method from frag1>(String str){
  FragmentToReceiveData fragment2 =  (FragmentToReceiveData)getSupportFragmentManager().findFragmentByTag(ViewPagerAdapter.getFragmentTag(1));                                                                                                                                                

    fragment2.getStringFromFrag1(String str);
}

FragmentToReceiveData

public void getStringFromFrag1(String str){
  <textview>.setText("str");

}
0
siriD

あなたはこれを試すことができます

最初のフラグメント

//adding data to the bundle class
Bundle b = new Bundle();
b.putString("user_name","simon");
b.putString("user_address","nepal");
//fragment operation
FragmentTransaction transaction = getFragmentManager().beginTransaction();
Fragment fragment=new friendfragment();
fragment.setArguments(b);
transaction.replace(R.id.container, fragment);
transaction.addToBackStack(null);
transaction.commit();

//Second Fragment(Receiving Fragment)
//write following code into onCreateView() method
Bundle b = getArguments();
String name = b.getString("user_name");
String address = b.getString("user_address");
0
Dinesh Sarma
try this :

- send data : 

        Bundle arg = new Bundle();
        arg.putInt("ID", "12");  //arg.putInt("KEY", "VALUE")
        arg.putString("NAME","Jaydeep");//arg.putString("KEY","VALUE")

        YourFragment fragment = new YourFragment();
        fragment.setArguments(arg);

        fragmentManager.beginTransaction().add("PUT YOUR FRAM ID", fragment, fragment.getClass().getName())
        .addToBackStack(null)
        .commit();

- receive data : 

        Bundle bundle = getIntent().getExtras();
        bundle.getInt("ID");
        bundle.getString("NAME");

        Log.e("Receive data : " ,"\nID - "+bundle.getInt("ID")+"\nNAME - "+bundle.getString("NAME"));
0