Non riesco a setText() in un'altra classe in Android
Domanda
Ho un TextView
con l'id android:id="@+id/yazi"
, e ho un pulsante integrato android:OnClick="gonderB"
e posso rispettare questo codice:
package com.seri.bir;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
Bilmez b;
TextView t;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
b = new Bilmez();
t = (TextView) findViewById(R.id.yazi);
}
public void gonderB (View v,TextView t,Bilmez b){
String s = " ..."+this;
b.yaziYaz(v,s,t);
}
}
class Bilmez {
public void yaziYaz(View v,String s,TextView t){
t.setText(s);
}
}
Tuttavia ho un errore.Posso setText
in un'altra classe?
Soluzione
Puoi sovrascrivere onClick dell'attività.Evitare l'uso della riga android:OnClick="gonderB" nel file xml.Penso che sia meglio implementare onClickListener e allegarlo a View Objects all'interno del tuo codice.
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity implements OnClickListener {
Bilmez b;
TextView t;
Button bt;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
b = new Bilmez();
t = (TextView) findViewById(R.id.yazi);
Button bt = (Button) findViewById(R.id.btn);
bt.setOnClickListener(this);
}
@Override
public void onClick(View clickedView) {
switch (clickedView.getId()) {
case R.id.btn:
String s = "...." + this;
b.changeText(t,s);
break;
}} //end of main class }
Nel metodo changeText si modifica il testo di TextView.Se lo desideri, questo metodo può essere inserito in un'altra classe.
class Bilmez {
public void changeText(TextView t, String s){
t.setText(s);
}
}
Altri suggerimenti
Forse quello che stai riscontrando è la necessità di eseguire la funzione sul thread dell'interfaccia utente?
public void yaziYaz(View v,final String s,final TextView t) {
runOnUiThread(new Runnable() {
public void run() {
t.setText(s);
}
});
}
penso che dovresti farlo:
public void gonderB (new View v,TextView t,Bilmez b){
String s = " ..."+this;
b.yaziYaz(v,s,t);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow