Atualizar TextView em uma visualização personalizada
-
15-11-2019 - |
Pergunta
Tenho uma visualização personalizada de meia tela e um TextView em minha atividade.
<com.sted.test.mainView
android:id="@+id/mainView" android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<TextView android:id="@+id/tvScore" android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_alignParentLeft="true" android:layout_alignParentBottom="true" />
Ao clicar na visualização personalizada, como posso atualizar o TextView na minha atividade?
Atualmente eu tenho esse código na minha visualização personalizada onTouchEvent()
mas atinge um NullPointerException no setText()
papel.Nunca devo atualizar o TextView na minha visualização personalizada?
TextView tvScore = (TextView) findViewById(R.id.tvScore);
tvScore.setText("Updated!");
Solução
Você não pode "ver" o TextView tvScore no código da sua visualização personalizada. findViewById()
procura visualizações na hierarquia começando pela visualização a partir da qual você a está chamando, ou pela raiz da hierarquia, se você estiver chamando Activity.findViewById()
(e é claro que isso funciona somente depois setContentView()
).
Se sua visualização personalizada fosse uma visualização composta, como, digamos, uma camada linear contendo alguns TextViews, então faria sentido usar findViewById()
lá.
A solução é encontrar o textview, por exemplo, em onCreate()
e depois passá-lo para a visualização personalizada de alguma forma (como alguns set..()
método).
EDITAR
Se na sua visualização personalizada você tiver algo como:
public class CustomView extends View {
...
TextView tvToUpdate;
public void setTvToUpdate(TextView tv) {
tvToUpdate = tv;
}
...
}
você pode fazer algo como:
protected void onCreate(Bundle bundle) {
...
CustomView cv = (CustomView) findViewById(R.id.customview);
TextView tv = (TextView) findViewById(R.id.tv);
cv.setTvToUpdate(tv);
...
}
para que, desde então, você tenha uma referência ao textview dentro do código da sua visualização personalizada.Seria como algum tipo de configuração.