片段通信中没有intent传递概念,片段只接受arguments。这是一个使用bundle的片段通信的简单示例:
YourReceiverFragment newFragment = new YourReceiverFragment();
Bundle args = new Bundle();
args.putString("key1", data1);
args.putString("key2", data1);
newFragment.setArguments(args);
并从onCreateView() 中的另一个(接收者)片段中获取它,例如:
String value1 = getArguments().getString("key1");
// and so on
但是,片段到片段通信的另一个好习惯是通过interfaces 使用Activity,例如:
SenderFragment:
public class SenderFragment extends Fragment {
SenderFragmentListener mCommunication;
public SenderFragment() {}// Required empty public constructor
@Override
public void onAttach(Context context) {
super.onAttach(context);
mCommunication = (SenderFragmentListener) context;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_sender, container, false);
Button button = (Button) view.findViewById(R.id.btn_sender);
// on click button
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCommunication.messageFromSenderFragment("Hello Fragment i am Sender...");
}
});
return view;
}
//Interface for communication
public interface SenderFragmentListener {
void messageFromSenderFragment(String msg);
}
@Override
public void onDetach() {
super.onDetach();
mCommunication = null;
}
}
活动:
public class MainActivity extends AppCompatActivity implements
SenderFragment.SenderFragmentListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void messageFromSenderFragment(String msg) {
FragmentManager manager = getSupportFragmentManager();
ReceiverFragment mReceiverFragment = (ReceiverFragment)manager.findFragmentById(R.id.frg_Receiver);
mReceiverFragment.youGotMsg(msg);
}
}
ReceiverFragment:
public class ReceiverFragment extends Fragment {
TextView tv_msg;
public ReceiverFragment(){} // Required empty public constructor
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_receiver, container, false);
tv_msg = (TextView) view.findViewById(R.id.tv_receiver);
return view;
}
//Receive message
public void youGotMsg(String msg) {
tv_msg.setText(msg);
}
}
如果有帮助,请告诉我。