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!");
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top