2016-11-08 5 views
-2

Я работаю над интеграцией Facebook для своего приложения. Все фрагменты, которые я использую в своем приложении в соответствии с требованиями клиента, составляют android.app.Fragment. Теперь, Фрагмент, который мы создали для Facebook, - android.support.v4.app.Fragment. Если мы преобразуем его в android.app.Fragment, функциональность loginButton.setFragment(this); показывает ошибку.Как перейти от «android.app.Fragment» к «android.support.v4.app.Fragment»

Мой вопрос, как я могу перейти от android.app.Fragment к android.support.v4.app.Fragment как этот кусок кода дает сообщение об ошибке:

getActivity().getFragmentManager() 
    .beginTransaction() 
    .replace(R.id.content_frame,new MainFragment()) 
    .addToBackStack(null) 
    .commit(); 

Ошибка это свидетельствует:

Wrong 2nd argument type. Found: 'com.nicklodean.nicklodean.fragment.MainFragment', required: 'android.app.Fragment'

Пожалуйста, подсказывают, как можно Я разбираюсь в этой проблеме.

ответ

0

просто добавить эти зависимости

dependencies { 
    compile 'com.android.support:support-v4:18.0.0' 
    compile "com.android.support:appcompat-v7:18.0.+" 
} 
+0

Почему версия 18? И 'v7' включает' v4', так что просто нужно второе –

2

Во-первых, вам нужно в вашем Gradle зависимостей

compile 'com.android.support:appcompat-v7:XX.Y.Z' 

Для соответствующей версии SDK XX.Y у вас есть.

(Действительно только нужна библиотека v4, но v7 не должно быть больно)


Я не могу помочь вам с loginButton.setFragment(this), потому что я не знаю, что делает ... Но, ты из Конечно, необходимо изменить параметр класса/импорт вашего класса loginButton.

Предполагая, что вы используете AppCompatActivity или FragmentActivity, вам необходимо использовать getActivity().getSupportFragmentManager().

Личное мнение: Вы должны быть с обратных вызовов к деятельности из фрагментов управлять FragmentManager (as shown here), непосредственно не вытаскивая его из фрагмента классов с использованием getActivity()

+0

использовать getActivity(). GetSupportFragmentManager(), мне нужно изменить свой app.fragment на android.support.v4.app.Fragment, и я не могу сделать что причина не соответствует требованиям – Devraj

+1

Тогда ваши требования противоречат вашему коду. Вы спросили, как использовать v4 Fragments, и так вы это делаете. –

0

Я надеюсь, что это помогает

FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    Fragment oldFragment = getSupportFragmentManager().findFragmentByTag(YOUR_FRAGMENT_TAG); 
    if (oldFragment == null) { 
     ft.add(yourfragment,YOUR_FRAGMENT_TAG); 
     ft.commitAllowingStateLoss(); 
    } else if (!oldFragment.isAdded()) { 
     ft.remove(oldFragment); 
     ft.add(yourfragment,YOUR_FRAGMENT_TAG); 
     ft.commitAllowingStateLoss(); 
    } 
+0

Не полезно, потому что мне нужно «импортировать файл android.support.v4.app.Fragment» для использования «getSupportFragmentManager()». и что я не могу этого сделать, потому что здесь я должен использовать «android.app.Fragment». – Devraj

+0

попытайтесь установить android.support.v4.app перед объявлением фрагмента: android.support.v4.app.Fragment = getSupportFragmentManager(). FindFragmentByTag (YOUR_FRAGMENT_TAG); – Tefa

+0

также перед FragmentTransaction, но android.support.v4.app: android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager(). BeginTransaction(); – Tefa

0

Вы просто должны использовать android.support.v4.app.FragmentManager с любыми android.support.v4.app.Fragment и android.app.FragmentManager с любыми android.app.Fragment. Об этом нет.

Если вам нужно использовать обе версии класса Fragment (в одном Activity), вам необходимо будет управлять фрагментами в пределах каждого FragmentManager отдельно. Взгляните на this answer, чтобы узнать, как это сделать.

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