Как передать значение 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. Вероятно, это не лучший способ получить данные для вашего фрагмента.

Другие вопросы по тегам