Как передать значение onNewIntent во фрагмент?
Я хочу передать значение намерения во фрагмент, прямо сейчас в операции я получаю значение намерения через onNewIntent, но я передаю значение намерения через Bundle to Fragment, но это не работает.
* MainActivity.java *
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
parseMessage = intent.getStringExtra("message");
if (parseMessage.length()>0) {
Bundle bundle = new Bundle();
bundle.putString("parseJson", parseMessage);
AbcdFragment activityFrag = new AbcdFragment();
activityFrag.setArguments(bundle);
}
}
@SuppressLint("DefaultLocale")
public class AllPagerAdapter extends FragmentPagerAdapter {
public AllPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch(position){
case 0:
return AbcdFragment.newInstance(getApplicationContext());
case 1:
return HelloFragment.newInstance(getApplicationContext());
default:
return null;
}
}
@Override
public CharSequence getPageTitle(int position) {
return CONTENT[position].toUpperCase();
}
@Override
public int getCount() {
return 2;
}
}
* AbcdFragment.java *
public class AbcdFragment extends Fragment{
public static AbcdFragment newInstance(Context context) {
AbcdFragment fragment = new AbcdFragment();
fragment.context = context;
return fragment;
}
@SuppressLint("InflateParams")
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.abcd_activity,container,false);
try {
parseJsonRes = getArguments().getString("parseJson");
Log.d("ParseActivityMsg", parseJsonRes);
} catch (Exception e) {
e.printStackTrace();
}
return view;
}
}
Это фрагмент окна просмотра, я хочу передать значение намерения в AbcdFragment, но я получаю нулевое значение в AbcdFragment.
Пожалуйста, просмотрите мой код и предложите мне решение
1 ответ
Посмотрите, как вы создаете фрагмент в пейджере return AbcdFragment.newInstance(getApplicationContext());
а затем посмотрите на вашу реализацию AbcdFragment.newInstance
public static AbcdFragment newInstance(Context context) {
AbcdFragment fragment = new AbcdFragment();
fragment.context = context;
return fragment;
}
В return AbcdFragment.newInstance()
Вы должны установить аргументы для фрагмента, который вы создаете внутри этого метода. Кроме того, вы даже не используете фрагмент, который вы создали в onNewIntent, вы просто создаете его и ничего не делаете с ним.
Кроме того, есть вероятность, что если вызывается onNewIntent, MainActivity уже может быть активна, так что AbcdFragment, вероятно, уже будет в памяти, поэтому getItem не будет вызываться и не будет создан newInstance с новыми аргументами, если это имеет смысл. Поскольку у вас есть только 2 фрагмента в вашем ViewPager, после того, как они будут созданы в первый раз, они будут сохранены в памяти, а не воссоздаются каждый раз, когда вы переключаетесь между ними.
Итак, если вы хотите сохранить свою текущую реализацию, вы должны установить аргументы в AbcdFragment.newInstance
и убедитесь, что новый экземпляр фрагмента создан ПОСЛЕ onNewIntent. Вероятно, это не лучший способ получить данные для вашего фрагмента.