2016-01-05 4 views
1

У меня есть Главное меню и создано fragment и его расположение. Теперь я не могу начать fragment, когда пользователь нажимает кнопку в главном меню. Главное меню имеет свой собственный макет. сейчас все равно я мог бы инициализировать его с button?Как инициализировать фрагмент из активности?

Button bt = (Button)findViewById(R.id.button1); 

    bt.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      startActivity(new Intent(MainMenu.this, ExercisesFragment.class)); 

     } 
    }); 
} 

Я попробовал его на это, но он дает ошибку говоря

Fragment cannot be cast to android.app.Activity 
+0

Читать здесь : http://stackoverflow.com/a/33811237/4874146 –

ответ

3

Вы добавляете фрагменты с помощью менеджера фрагмента:

FragmentManager fragmentManager = getFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
ExercisesFragment fragment = new ExercisesFragment(); 
fragmentTransaction.replace(R.id.fragment_container, fragment); 
fragmentTransaction.commit(); 

читать больше фрагментов, начало здесь:

http://developer.android.com/guide/components/fragments.html

+0

okay thanks really appreciated, и у меня в настоящее время есть только один фрагмент, так что должно быть (R.id. ??) – Max

+0

Это FrameLayout из вашего xml-файла активности, т.е. .: < ' – marcinj

+0

Ошибка: (29, 36) error: не найдено подходящего метода для add (int, ExercisesFragment) метод FragmentTransaction.add (Fragment, String) не применимо (несоответствие аргумента; int не может быть преобразован в Фрагмент) метод FragmentTransaction.add (int, Fragment) не применим (несоответствие аргументов; ExercisesFragment не может быть преобразован в фрагмент) – Max

0
FragmentTransaction ft = a.getSupportFragmentManager().beginTransaction(); 
    ft.add(R.id.main_fragment, your_fragment); 
    ft.addToBackStack("ifneeded"); 
    ft.commit(); 
0

Вы делаете это неправильно! Намерения не используются для загрузки фрагмента. Решение заключается в использовании fragment transactions для динамической загрузки фрагмента, который вы хотите сфокусировать.

Вот что вам нужно сделать:

  1. Есть контейнер для фрагмента внутри макета вы активность Пример: Предположим, что расположение ресурса моей деятельности является activity_main.xml, я бы контейнер like so

  2. Следуйте this руководство, чтобы создать фрагмент

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

 

    bt.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      getFragmentManager() 
       .beginTransaction() 
       .replace(R.id.fragment-container, new AbcFragment) 
       .commit(); 
     } 

    }); 

+0

он говорит '(' или '[' ожидается на .replace (R.id.fragment-container, new ExercisesFragment), в конце концов здесь – Max

Смежные вопросы