Celui-ci m'a perplexe.
J'ai besoin d'appeler une méthode d'activité à partir d'une classe de mise en page personnalisée. Le problème avec cela est que je ne sais pas comment accéder à l'activité à partir de la mise en page.
ProfileView
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();
}
}
ProfilActivité
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);
}
}
Comme vous pouvez le voir ci-dessus, j'instancie le profileView par programme et je lui passe le activityContext. 2 questions:
- Suis-je en train de passer le bon contexte dans Profileview?
- Comment obtenir l'activité contenante du contexte?
android
android-layout
android-activity
view
hierarchy
HARMONIQUE
la source
la source
C'est quelque chose que j'ai utilisé avec succès pour convertir
Context
àActivity
lors de l' utilisation dans l'interface utilisateur dans des fragments ou des vues personnalisées. Il décompressera ContextWrapper de manière récursive ou retournera null en cas d'échec.la source
Il existe deux contextes différents dans Android. Un pour votre application (appelons-le le GRAND) et un pour chaque vue (appelons-le le contexte d'activité).
Un linearLayout est une vue, vous devez donc appeler le contexte d'activité. Pour l'appeler à partir d'une activité, appelez simplement «ceci». Si facile n'est-ce pas?
Lorsque vous utilisez
Vous appelez le contexte BIG, celui qui décrit votre application et ne peut pas gérer votre vue.
Un gros problème avec Android est qu'un contexte ne peut pas appeler votre activité. C'est un gros problème pour éviter cela lorsque quelqu'un commence avec le développement Android. Vous devez trouver une meilleure façon de coder votre classe (ou remplacer «Contexte contextuel» par «Activité d'activité» et le convertir en «Contexte» si nécessaire).
Cordialement.
Juste pour mettre à jour ma réponse. Le moyen le plus simple d'obtenir votre
Activity context
est de définir unestatic
instance dans votre fichierActivity
. Par exempleEt puis, dans votre
Task
,Dialog
,View
, vous pouvez utiliser ce genre de code pour obtenir votreActivity context
:la source
R
). Les gens de Google ont besoin d'enrichir leur vocabulaire.Il n'a pas été testé et je l'ai bien codé. mais je transmets un moyen de réaliser ce que vous voulez.
Tout d'abord créer et interface
Et implémentez ceci dans n'importe quelle activité.
et appelle ça comme
la source
Context
. Comme le déclare Nepster, la meilleure pratique consiste à transmettre un rappel, donc chaque fois qu'un événement intéressant le parent se produit, le rappel sera déclenché avec les données pertinentes.Le contexte peut être une application, un service, une activité, etc.
Normalement, le contexte des vues dans une activité est l'activité elle-même, vous pouvez donc penser que vous pouvez simplement convertir ce contexte en activité, mais en réalité vous ne pouvez pas toujours le faire, car le contexte peut également être un ContextThemeWrapper dans ce cas.
ContextThemeWrapper est fortement utilisé dans les versions récentes d'AppCompat et d'Android (grâce à l'attribut android: theme dans les mises en page), donc je n'effectuerais personnellement jamais ce casting.
La réponse est donc courte: vous ne pouvez pas récupérer de manière fiable une activité à partir d'un contexte dans une vue. Passez l'activité à la vue en appelant une méthode sur celle-ci qui prend l'activité comme paramètre.
la source
N'utilisez jamais getApplicationContext () avec des vues.
Cela doit toujours être le contexte de l'activité, car la vue est attachée à l'activité. En outre, vous pouvez avoir un ensemble de thèmes personnalisé et lors de l'utilisation du contexte de l'application, tous les thèmes seront perdus. En savoir plus sur les différentes versions de contextes ici .
la source
Et à Kotlin:
la source
une activité est une spécialisation du contexte donc, si vous avez un contexte, vous savez déjà quelle activité vous avez l'intention d'utiliser et pouvez simplement convertir a en c ; où a est une activité et c est un contexte.
la source
J'ai utilisé l'activité de conversion
la source
Cette méthode devrait être utile ..!
J'espère que cela aide .. Joyeux codage!
la source
que diriez-vous d'un rappel de données en direct,
la source