При использовании фрагментов вид не найден для идентификатора - PullRequest
0 голосов
/ 22 октября 2019

Я сделал все, что смог найти, чтобы решить мою проблему, так же, как и многие другие, с фрагмент-менеджером, который не может найти представление.

Перепробовал все, что нашел в Интернете и мог подумать.

Вот мой MainActivity.java

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        MenuFragment menuFragment = new MenuFragment();
        FragmentManager fmStart = getSupportFragmentManager();
        FragmentTransaction fmTrans = fmStart.beginTransaction();
        fmTrans.add(R.id.fragmentContainerID, menuFragment);
        fmTrans.commitAllowingStateLoss();


    }

    public void addFragment(Fragment fragment, boolean addToBackStack, String tag) {
        FragmentManager manager = getSupportFragmentManager();
        FragmentTransaction ft = manager.beginTransaction();

        if (addToBackStack) {
            ft.addToBackStack(tag);
        }
        ft.replace(R.id.fragmentContainerID, fragment, tag);
        ft.commitAllowingStateLoss();
    }
}

Я получаю такую ​​же ошибку, как и многие другие:

java.lang.IllegalArgumentException: No view found for id 0x7f080073 (se.iteda.hangman:id/fragmentContainerID) for fragment MenuFragment{d8a58aa (60d879ee-e84c-425e-a1a1-8e9be9c3b3a8) id=0x7f080073}

Что я хочу сделать, это загрузить фрагмент при запуске (MenuFragment)и в этом фрагменте у меня есть 2 кнопки, которые меняют фрагменты.

1 Ответ

0 голосов
/ 22 октября 2019

Хорошо. Я открыл ваш проект в Github.

Ошибка здесь:

MainActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    ....
    fmTrans.add(R.id.fragmentContainerID, menuFragment);
    ....
}

Вы добавляете фрагмент в fragmentContainerID. Тем не менее, это представление не было добавлено в Activity (что привело к ошибке вида не найдена).

Итак, для исправления, я думаю, вам просто нужно применить макет к основному действию. Что-то вроде:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Add this after super.onCreate()
    setContentView(R.layout.activity_main);
    .....
}

РЕДАКТИРОВАТЬ

И, как я сказал в одном из моих комментариев, я думаю, что вам не нужен код ниже в MenuFragment.java. Я думаю, что вы можете удалить его.

MenuFragment menuFragment = new MenuFragment();
((MainActivity)getActivity()).addFragment(menuFragment, true, "Menu");
...