我讀了幾個地方(here,here或here)關於如何做到這一點,我試圖跟着他們,但即時通訊失蹤的東西,我不知道是什麼。我想從FragmentAlarm發送數據到FragmentHome。下面的代碼是我對此的嘗試。我試圖搞砸了一下。在android中的2個片段之間傳遞數據而不使用活動?
1)爲什麼我沒有得到任何輸出?
2)我也必須通過MainActivity爲了在兩個片段之間進行通信嗎?我試圖使用一個公共靜態方法結合FragmentStatePagerAdapter來「避免」使用MainActivity。但我不知道這是否可能。
預先感謝
FragmentAlarm
public class FragmentAlarm extends Fragment implements SeekBar.OnSeekBarChangeListener{
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
private String mParam1;
private String mParam2;
public FragmentAlarm() { // Required empty public constructor}
public static FragmentAlarm newInstance(String param1, String param2) {
FragmentAlarm fragment = new FragmentAlarm();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
//put any extra arguments that you may want to supply to this fragment
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.tab_alarm,container,false);
FragmentAlarm.newInstance(ARG_PARAM1,"test from alarm");
FragmentHome.newInstance(ARG_PARAM1,"test from alarm");
return v;
}
@Override
public void onStart() {
super.onStart();
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
System.out.println("mParam1 " + mParam1);
System.out.println("mParam2 " + mParam2);
}
}
}
FragmentHome
public class FragmentHome extends Fragment implements ValuesLoadedListener, SwipeRefreshLayout.OnRefreshListener {
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
private String mParam1;
private String mParam2;
public FragmentHome() {// Required empty public constructor }
// TODO: Rename and change types and number of parameters
public static FragmentHome newInstance(String param1, String param2) {
FragmentHome fragment = new FragmentHome();
Bundle args = new Bundle();
//put any extra arguments that you may want to supply to this fragment
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
@Override
public void onStart() {
super.onStart();
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
System.out.println("mParam1 " + mParam1);
System.out.println("mParam2 " + mParam2);
}
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.tab_home,container,false);
FragmentAlarm.newInstance(ARG_PARAM1,"test from home");
FragmentHome.newInstance(ARG_PARAM1,"test from home");
...
return v;
}
PagerAdapter
public class MyViewPagerAdapter extends FragmentStatePagerAdapter {
private Context context;
int icons[] = {R.drawable.ic_home,
R.drawable.ic_graph,
R.drawable.ic_bell_mid,
R.drawable.ic_settings};
public MyViewPagerAdapter(FragmentManager fm, Context context) {
super(fm);
this.context = context;
}
@Override
public Fragment getItem(int position) {
if(position == 0) // if the position is 0 we are returning the First tab
{
return new FragmentHome();
}
else if (position == 1)
{
return new FragmentTrend();
}
else if (position == 2)
{
return new FragmentAlarm();
}
else
{
return new FragmentSetting();
}
}
@Override
public int getCount() {
return 4;
}
public Drawable getIcon(int position)
{
return context.getResources().getDrawable(icons[position]);
}
}
是的,我知道這一點。我說有點因爲我嘗試了一次嘗試,但它似乎並沒有工作。你能否把你說的話與我發佈的我的代碼相關的簡單示例代碼聯繫起來?我仍然不知道我是否需要使用活動進行交流。謝謝:) @AAnkit – Celly
你想要哪個選項的例子?如果您使用BR,則必須使用相同的意向操作來發送/接收廣播。 – AAnkit
我想知道爲什麼我的輸出仍然爲空,即使當我試圖通過新實例傳遞一個文本到片段時,請。感謝您的幫助@AAnkit – Celly