Объявите активность в AndroidManifest. xml для использования намерения - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть следующий объект Intent, который я пытаюсь передать из фрагмента SeventhFragment. java в другой фрагмент (SixthFragment. java).

Intent i = new Intent(getContext(), SixthFragment.class);
i.putExtra("officeHour", hour);
startActivity(i); // this code is in SeventhFragment.java

В SixthFragment. java, У меня есть следующий код, чтобы попытаться вернуть этот объект:

Intent intent = (Intent) getActivity().getIntent(); // this code is in SixthFragment.java.
OfficeHour add = (OfficeHour) intent.getSerializableExtra("officeHour");

Однако я получаю исключение:

android.content.ActivityNotFoundException: Unable to find explicit activity class 
{com.example.app/com.example.app.SixthFragment}; have you declared 
this activity in your AndroidManifest.xml?

Я могу сказать, что это означает, что мне нужно добавить объявление активности в AndroidManifest. xml, но я не могу сказать, что я должен добавить / как это должно быть отформатировано. В качестве заметки я попытался найти существующие вопросы, но до сих пор не могу сказать, что именно написать в моем манифесте. Спасибо!

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Намерение используется для начала нового действия. Вы не можете изменять фрагменты, используя Intent. Чтобы изменить фрагменты.

Попробуйте ниже ссылки и код для реализации фрагментов.

fragmnets 1 Фрагменты в деталях

   FristFragment firstFragmentInstance=new FirstFragment();
    FragmentManager firstFragmentManager=getSupportFragmentManager();
    FragmentTransaction firstFragmentTransaction=firstFragmentManager.beginTransaction();
    firstFragmentTransaction.add(R.id.content_main,firstFragmentInstance,"").commit();

И заменить фрагменты

   FristFragment firstFragmentInstance=new FirstFragment();
    FragmentManager firstFragmentManager=getSupportFragmentManager();
    FragmentTransaction firstFragmentTransaction=firstFragmentManager.beginTransaction();
    firstFragmentTransaction.replace(R.id.content_main,firstFragmentInstance,"first_fragment_tag").addToBackStack(null).commit()
0 голосов
/ 26 апреля 2020

A Fragment всегда должен быть хостом Activity. Вы не можете переходить между фрагментами, используя Intent. Вместо этого вы можете использовать FragmentTransaction и передать данные в качестве аргумента:

// this code is in SeventhFragment's underlying Activity
Fragment f = new SixthFragment();
Bundle args = new Bundle();
args.putSerializable("officeHour", hour);
f.setArguments(args);

// Execute a transaction to replace SeventhFragment with SixthFragment
FragmentTransaction ft = getFragmentManager().beginTransaction();
// R.id.myfragment needs to be defined in your Activity's layout resource
ft.replace(R.id.myfragment, f);
ft.commit();

Затем вы можете получить значение аргумента в SixthFragment * onCreateView:

public class SixthFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        OfficeHour add = (OfficeHour) getArguments().getSerializable("officeHour");
        // ...
    }
}

Кроме того, вы можете встроить SixthFragment в собственный Activity и использовать намерение для его запуска.

Дополнительную информацию можно найти в официальной Fragment документации .

...