Este aqui me deixou perplexo.
Preciso chamar um método de atividade de dentro de uma classe de layout personalizada. O problema disso é que não sei como acessar a atividade de dentro do layout.
Vista de perfil
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);
}
}
Como você pode ver acima, estou instanciando o profileView programaticamente e passando o activityContext com ele. 2 perguntas:
- Estou passando o contexto correto para o Profileview?
- Como obtenho a atividade que contém o contexto?
android
android-layout
android-activity
view
hierarchy
OVERTONE
fonte
fonte
Isso é algo que eu usei com êxito para converter
Context
aoActivity
operar na interface do usuário em fragmentos ou visualizações personalizadas. Ele descompactará o ContextWrapper recursivamente ou retornará nulo se falhar.fonte
Existem dois contextos diferentes no Android. Um para o seu aplicativo (vamos chamá-lo de GRANDE) e um para cada visualização (vamos chamá-lo de contexto da atividade).
Um linearLayout é uma visualização, então você deve chamar o contexto de atividade. Para chamá-lo de uma atividade, basta chamar "this". Tão fácil, não é?
Quando você usa
Você chama o contexto BIG, aquele que descreve seu aplicativo e não pode gerenciar sua exibição.
Um grande problema com o Android é que um contexto não pode chamar sua atividade. Isso é importante para evitar isso quando alguém começa com o desenvolvimento do Android. Você precisa encontrar uma maneira melhor de codificar sua classe (ou substituir "Contexto de contexto" por "Atividade de atividade" e convertê-la em "Contexto" quando necessário).
Saudações.
Apenas para atualizar minha resposta. A maneira mais fácil de obter seu
Activity context
é definir umastatic
instância no seuActivity
. Por exemploE então, em sua
Task
,Dialog
,View
, você pode usar esse tipo de código para obter o seuActivity context
:fonte
R
). O pessoal do Google precisa enriquecer seu vocabulário.Não foi testado e eu o codifiquei corretamente. mas estou transmitindo uma maneira de conseguir o que você deseja.
Antes de tudo, crie e faça interface
E implemente isso em qualquer atividade.
e chame assim
fonte
Context
. Como afirma o Nepster, a melhor prática é transmitir um retorno de chamada; portanto, sempre que algo interessar aos pais, o retorno de chamada será acionado com os dados relevantes.O contexto pode ser um Aplicativo, um Serviço, uma Atividade e muito mais.
Normalmente, o contexto de Views em uma Activity é a própria Activity, então você pode pensar que pode apenas converter esse Contexto em Activity, mas na verdade nem sempre pode fazê-lo, porque o contexto também pode ser um ContextThemeWrapper nesse caso.
O ContextThemeWrapper é muito usado nas versões recentes do AppCompat e Android (graças ao atributo android: theme nos layouts), então eu pessoalmente nunca faria esse elenco.
A resposta é curta: você não pode recuperar com segurança uma Atividade de um Contexto em uma Visualização. Passe a Atividade para a visualização chamando um método que tome a Atividade como parâmetro.
fonte
Nunca use getApplicationContext () com visualizações.
Sempre deve ser o contexto da atividade, pois a visualização é anexada à atividade. Além disso, você pode ter um conjunto de temas personalizado e, ao usar o contexto do aplicativo, todos os temas serão perdidos. Leia mais sobre diferentes versões de contextos aqui .
fonte
E em Kotlin:
fonte
an Activity é uma especialização de Contexto, portanto, se você tem um Contexto, já sabe qual atividade pretende usar e pode simplesmente converter a em c ; onde a é uma atividade ec é um contexto.
fonte
Eu usei convert Activity
fonte
Este método deve ser útil ..!
Espero que isso ajude .. Feliz codificação!
fonte
que tal um retorno de chamada de dados ao vivo,
fonte