Q4 getFragmentManager z aktywnością - niezgodne typy


Mam prostą czynność, która działa zgodnie z oczekiwaniami.
import android.app.Activity;
import android.app.FragmentManager;
// import android.support.v4.app.FragmentManager;
import android.os.Bundle;public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// FragmentManager fm = getSupportFragmentManager();// ActionBarActivity
FragmentManager fm = getFragmentManager();// Activity
}
}

Potem go wymieniłem
import android.app.FragmentManager;

od
import android.support.v4.app.FragmentManager;

aby móc obsługiwać moje stare urządzenia .. Jednak ten zgłasza błąd:
Incompatible types. Required: android.support.v4.app.FragmentManager Found: android.app.FragmentManager

Co ja tu robię źle?
Popularnym rozwiązaniem, które znalazłem, jest użycie zamiast tego metody getSupportFragmentManager (), ale działa to tylko w przypadku ActionBarActivites [edytuj - zobacz odpowiedzi] i FragmentActivities.
nie można konwertować z android.app.FragmentManager do android.support.v4.app.FragmentManager
https://coderoad.ru/16690364/
Inne odpowiednie rozwiązanie wskazuje na użycie zamiast tego FragmentActivity, ale wydaje się, że ma te same odziedziczone problemy.
Metoda GetFragmentManager () nie została zdefiniowana dla typu MyActivity
https://coderoad.ru/10596946/
import android.support.v4.app.FragmentManager;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity; public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
// FragmentManager fm = getSupportFragmentManager();// ActionBarActivity
FragmentManager fm = getFragmentManager();
}
}

Jestem prawie pewien, że rozwiązanie tego problemu będzie już dostępne na SE, ale nie jest to łatwe (dla mnie) do znalezienia. Minimalny przykład powinien pomóc innym ludziom to zrozumieć.
  • Jestem całkiem nowy w Androidzie.

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W pierwszym przypadku, jeśli używasz
getSupportFragmentManager ()
, musisz rozszerzyć
FragmentActivity
lub rozszerzyć
ActionBarActivity
(rozszerza FragmentActivity) jako
FragmentActivity
jest klasą bazową dla fragmentów obsługujących.
W drugim przypadku musisz użyć
getSupportFragmentManager ()
zamiast
getFragmentManager ()
.
Fragmenty zostały włożone do plastra miodu. Aby wspierać fragmenty poniżej plastra miodu, musisz użyć fragmentów z biblioteki wsparcia, w takim przypadku musisz rozszerzyć
FragmentActivity
i użyć
getSupportFragmentManager ()
.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

use getSupportFragmentManager() instead, but this only works for ActionBarActivites.

Źle, to powinno działać w twoim
FragmentActivity
, że FragmentActivity znajduje się w twoim pakiecie wsparcia, gdy utrzymujesz starsze urządzenie, to wszystkie importowane z
activity
,
fragment
,
menedżerów fragmentów
itp. muszą mieć
android.support.v4.
, aby wskazać, że używasz pakietu pomocy. bez użycia so spowoduje
błąd niezgodnego czasu kompilacji.
What am I doing wrong here?

Pakujesz pakiet wsparcia z nieobsługiwanym pakietem, co powoduje
błąd niezgodnego czasu kompilacji
, jak powiedziałem powyżej.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

dla Kotlina mi nie należy się zmieniać żeby nie na B4
użyj poniżej, aby uzyskać aktywność, o ile jest to rodzic
(activity as MainDrawerActivity)

lub
((YourActivityName)getActivity());
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Do użytku w oknie dialogowym Java:
- import android.app.FragmentManager;
- FragmentManager fragmentManager;

Kotlin:
- (activity as? YourActivity)?.fragmentManager

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się