私は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();
あなたは以下のようなことをすることができます、
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);
}
フラグメントからアクティビティにデータを送信する場合は、インターフェイスを使用できます。
しかし、フラグメントから別のフラグメントにデータを送信する場合は、複雑になります。データをアクティビティに送信してから、他のフラグメントに送信する必要があります。
私はこの問題を解決するために EventBus を使用します。使い方。
それでおしまい。独自のインターフェースを作成する必要はありません。
バックグラウンドサービスまたはスレッドからアクティビティへの通信にもイベントバスを使用できます。
EventBus HowTo および Repository もチェックアウトしてください。
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");
}
あなたはこれを試すことができます
最初のフラグメント
//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");
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"));