[Android] Alterar campo TextView

sornafix

Power Member
Bom dia,
Eu sou novo em programação Android, e neste momento estou tentando fazer o seguinte: Tenho uma primeira activity, que serve para inserir uma frase e que ao carregar no botão ele redirecciona para uma segunda activity que tem por objectivo apresentar a frase escrita.
mas sempre que tento invocar a segunda activity o programa é interrompido.
Eu sei que dá para criar um textview no método e depois ele é apresentado. Mas queria era alterar o textView que já tinha criado no ficheiro XML da actividade.

Código:
public void onCreate(Bundle savedInstanceState) {	    super.onCreate(savedInstanceState);
	    setContentView(R.layout.activity_main);


        // retira a msg do intent
	    Intent intent = getIntent();
	    String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);


	    // define este text como textView criado no ficheiro XML
	    TextView text = (TextView) findViewById(R.id.textView1);
	    
	    text.setText(message);
	   	


	}

Desde já obrigado pela disponibilidade.
 
Na compilação não dá erro... Executo o programa no emulador e aparece a primeira atividade. Quando clico no botão para executar a segunda atividade, aparece o erro a dizer que que a aplicação foi parada.
Sim tenho na xml da segunda atividade o textView1 e já reparei que só da erro se tiver a linha de código text.setText(message);
Claro que se tirar essa linha, tb não faz nada... só apresenta a segunda atividade em branco.
 
Podes ver no logcat o erro específico (neste caso deve ser nullpointerexception porque o text deve estar a null). Experimenta fazer o findViewById e o setText no onPostCreate.
 
Código:
public void onCreate(Bundle savedInstanceState) {        
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      // retira a msg do intent
      Intent intent = getIntent();
      String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

      // define este text como textView criado no ficheiro XML
      TextView text = (TextView) findViewById(R.id.textView1);
        
     text.setText(message);           
}

Tás com sorte, tenho aqui algo parecido...

Se queres passar algo para a segunda Activity, estás a fazer um getStringExtra da MainActivity?

Suponho que o que queres é algo como

1º - ActivityMain

Código:
            Intent Activity_DOIS = new Intent(getContext(), Activity_DOIS.class);
            Activity_DOIS.putExtra("myString", text.getText(() );
            startActivity(Activity_DOIS);

2ª no onCreate da Activity_DOIS, fazes

Código:
        Bundle b = getIntent().getExtras();
        String myString = b.getString("myString");

Activity_DOIS é a tua segunda activity, não faço ideia como lhe chamaste.
 
Boas, eu inicialmente tinha feito deste modo:
Código:
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        
        Intent intent = getIntent();
        String msg = intent.getStringExtra("mensagem");
        
        TextView textView = new TextView(this);
        textView.setTextSize(40);
        textView.setText(msg);
        setContentView(textView);
        
    }
e funcionava... Mas claro que era necessário criar um novo textview, e o layout que eu tinha criado inicialmente no ficheiro XML, não era apresentado.
Depois tentei alterar para que fosse alterado o textView do layout.

Código:
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dysplay);


        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment()).commit();
        }
        
        Intent intent = getIntent();
        String msg = intent.getStringExtra("mensagem");
        
            TextView textView1 = (TextView) findViewById(R.id.textView1);
            textView1.setText(msg);
    }

Mas deste modo dá o erro e aplicação é encerrada. Caso não tentasse alterar o textView1, utilizando as últimas duas linhas do método, o layout era apresentado sem problemas e o botão que tinha na actividade funcionava sem problemas.
Estive a ver no logcat e dá um erro de NullPointException. E já tentei utilizar o código Bundle e continua com o mesmo problema.

Será que isto é devido a utilizar fragments dentro das actividades? Só pergunto porque vi um exemplo de código em que algo similar ao que tento fazer funciona, mas não tem os fragments.

E já agora o que é o onPostCreate? é que vi e não reparei nenhum método criado por defeito pelo eclipse.
 
Última edição:
E já experimentaste correr a app sem o fragmento?
É que com pequenos excertos de código é dificil de saber a causa. Olhando para esse código não vejo nada de suspeito.
Ajudava saber em que linha é que ele está a dar null pointer
 
Será que isto é devido a utilizar fragments dentro das actividades? Só pergunto porque vi um exemplo de código em que algo similar ao que tento fazer funciona, mas não tem os fragments.

E já agora o que é o onPostCreate? é que vi e não reparei nenhum método criado por defeito pelo eclipse.

Sim, se a TextView faz parte de um fragment, no onCreate ainda não está visível, e assim o findViewById está a retornar-te null, e depois crasha quando fazes o setText. Portanto a solução é fazeres isso após o fragment ser criado, no onCreateView do fragment.
 
Finalmente consegui, o problema consistia em que o textView encontrava-se no fragment associado a actividade e não na própria actividade... Ao colocar o textView na atividade, ja funcionou normalmente. Ainda tentei colocar o intent no onCreateView, mas dava erro na mesma (provavelmente culpa do programador inexperiente :D)
 
Back
Topo