Как передать данные из фрагмента в активность с пакетом - PullRequest
0 голосов
/ 31 января 2020

У меня есть вид поиска по основному виду деятельности, я хочу передать отправленную строку из MainActivity в SearchFragment.

@Override
public boolean onQueryTextSubmit(String query) {
   Bundle bundle = new Bundle();
   bundle.putString("searchTitle", query);
   SearchFragment searchFragment = new SearchFragment();
   searchFragment.setArguments(bundle);

   Intent mIntent = new Intent(MainActivity.this, SearchActivity.class);
   startActivity(mIntent);

   return true;
}

Но я получаю исключение NullPointerException при попытке получить данные в SearchFragment

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    strText = getArguments().getString("searchTitle");

    return inflater.inflate(R.layout.fragment_movies, container, false);
}

Как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 31 января 2020

Если вы хотите передать данные через пакет, по крайней мере, вы должны поместить этот пакет в свое намерение

mIntent.putExtras(bundle)

Чем вы можете получить его через этот

getActivity().getIntent().getExtras().getString("searchTitle")
0 голосов
/ 31 января 2020

Пожалуйста, попробуйте это.

В вашей основной деятельности.

@Override
public boolean onQueryTextSubmit(String query) {
    Bundle bundle = new Bundle();
    bundle.putString("searchTitle", query);
    SearchFragment searchFragment = new SearchFragment();
    searchFragment.setArguments(bundle);

    Intent mIntent = new Intent(MainActivity.this, SearchActivity.class);

    // Add this line.
    mIntent.putExtra("key", "value");

    startActivity(mIntent);
    return true;
}

В вашей поисковой деятельности.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView([layout_name])

    Fragment fragment = new Fragment();
    Bundle bundle = new Bundle();

    // Put data respected to your data type.
    bundle.putString("key", getIntent().getStringExtra("key"));
    fragment.setArguments(bundle);

    // Add new fragment
    getSupportFragmentManager()
        .beginTransaction()
        .add([container_id], fragment)
        .addToBackStack(null)
        .commit()
}

В вашем фрагменте.

@Override
public onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    String value = getArguments().getString("key");
}
...