Ten mnie zaskoczył.
Muszę wywołać metodę działania z niestandardowej klasy układu. Problem polega na tym, że nie wiem, jak uzyskać dostęp do działania z poziomu układu.
Widok profilu
public class ProfileView extends LinearLayout
{
TextView profileTitleTextView;
ImageView profileScreenImageButton;
boolean isEmpty;
ProfileData data;
String name;
public ProfileView(Context context, AttributeSet attrs, String name, final ProfileData profileData)
{
super(context, attrs);
......
......
}
//Heres where things get complicated
public void onClick(View v)
{
//Need to get the parent activity and call its method.
ProfileActivity x = (ProfileActivity) context;
x.activityMethod();
}
}
ProfileActivity
public class ProfileActivityActivity extends Activity
{
//In here I am creating multiple ProfileViews and adding them to the activity dynamically.
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.profile_activity_main);
}
public void addProfilesToThisView()
{
ProfileData tempPd = new tempPd(.....)
Context actvitiyContext = this.getApplicationContext();
//Profile view needs context, null, name and a profileData
ProfileView pv = new ProfileView(actvitiyContext, null, temp, tempPd);
profileLayout.addView(pv);
}
}
Jak widać powyżej, tworzę programowo instancję ProfileView i przekazuję z nią działanie ActivityContext. 2 pytania:
- Czy przekazuję poprawny kontekst do Profileview?
- Jak uzyskać aktywność zawierającą z kontekstu?
android
android-layout
android-activity
view
hierarchy
OVERTONE
źródło
źródło
To jest coś, co z powodzeniem stosowany do konwersji
Context
, abyActivity
podczas pracy w interfejsie we fragmentach lub widoków niestandardowych. Rozpakuje rekursywnie ContextWrapper lub zwróci null, jeśli się nie powiedzie.źródło
W Androidzie istnieją dwa różne konteksty. Jeden dla Twojej aplikacji (nazwijmy to DUŻYM) i jeden dla każdego widoku (nazwijmy to kontekstem działania).
Liniowy układ jest widokiem, więc musisz wywołać kontekst działania. Aby nazwać to z działania, po prostu nazywaj to. To takie proste, prawda?
Kiedy używasz
Wywołujesz kontekst BIG, ten, który opisuje twoją aplikację i nie może zarządzać twoim widokiem.
Dużym problemem związanym z Androidem jest to, że kontekst nie może wywołać Twojej aktywności. To wielka sprawa, aby tego uniknąć, gdy ktoś zaczyna od opracowania Androida. Musisz znaleźć lepszy sposób na zakodowanie swojej klasy (lub zastąp „Kontekst kontekstowy” przez „Aktywność aktywności” i w razie potrzeby przenieś go na „Kontekst”).
Pozdrowienia.
Aby zaktualizować moją odpowiedź. Najłatwiejszym sposobem na uzyskanie tego
Activity context
jest zdefiniowaniestatic
instancji w twoimActivity
. Na przykładA potem, w twoich
Task
,Dialog
,View
, można użyć tego rodzaju kodu, aby otrzymaćActivity context
:źródło
R
s). Ludzie Google muszą wzbogacić swoje słownictwo.Jest nieprzetestowany i poprawnie go zakodowałem. ale przekazuję sposób na osiągnięcie tego, co chcesz.
Po pierwsze tworzenie i interfejs
I zaimplementuj to do dowolnego działania.
i nazwać to tak
źródło
Context
. Jak stwierdza Nepster, najlepszą praktyką jest przekazywanie oddzwonienia, więc za każdym razem, gdy wydarzy się coś interesującego dla rodzica, oddzwanianie zostanie uruchomione z odpowiednimi danymi.Kontekstem może być Aplikacja, Usługa, Działanie i wiele innych.
Zwykle kontekstem widoków w działaniu jest samo działanie, więc możesz pomyśleć, że możesz po prostu rzucić ten kontekst na działanie, ale tak naprawdę nie zawsze możesz to zrobić, ponieważ w tym przypadku kontekstem może być również ContextThemeWrapper.
ContextThemeWrapper jest intensywnie używany w najnowszych wersjach AppCompat i Androida (dzięki androidowi: atrybut motywu w układach), więc osobiście nigdy nie wykonałbym tego rzutowania.
Krótka odpowiedź brzmi: nie można w sposób wiarygodny odzyskać działania z kontekstu w widoku. Przekaż działanie do widoku, wywołując metodę, która przyjmuje działanie jako parametr.
źródło
Nigdy nie używaj getApplicationContext () z widokami.
Zawsze powinien to być kontekst działania, ponieważ widok jest dołączony do działania. Ponadto możesz mieć niestandardowy zestaw motywów, a podczas korzystania z kontekstu aplikacji wszystkie motywy zostaną utracone. Przeczytaj więcej o różnych wersjach kontekstów tutaj .
źródło
A w Kotlinie:
źródło
działalności jest specjalizacja z kontekstu tak, jeśli masz Context już znasz których działalność masz zamiar używać, a może po prostu rzucić do c ; gdzie a jest działaniem, a c jest kontekstem.
źródło
Użyłem konwersji działania
źródło
Ta metoda powinna być pomocna ..!
Mam nadzieję, że to pomoże .. Wesołego kodowania!
źródło
co powiesz na niektóre wywołania zwrotne danych na żywo,
źródło