Pourquoi est-setText() ne fonctionne pas dans le code suivant sur le TextView?
//All required Imports
public class PuzzleActivity extends Activity implements OnClickListener{
private PuzzlerDB db;
private Puzzle puz;
private int puzId=1;
private String puzAns="";
private int score=0;
private TextView tvPuzContent;
private EditText etPuzAns;
private Button btnCheck;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
final boolean customTitleSupported = requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.activity_puzzle);
if ( customTitleSupported ) {
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title);
}
db = new PuzzlerDB(this);
puz = db.getPuzzle(puzId);
puzAns = puz.getAnswer();
tvPuzContent = (TextView) findViewById(R.id.tv_puz_content);
tvPuzContent.setText(puz.getContent());
btnCheck = (Button) findViewById(R.id.btn_check);
btnCheck.setOnClickListener(this);
android.util.Log.v("IN SIDE ACTIVITY: ", "id: "+ puzId + " answer: "+puz.getAnswer());
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_check:
checkAndNotify(puzAns);
break;
}
}
private void checkAndNotify(String puzAns)
{
String ans = ((EditText)findViewById(R.id.te_puz_ans)).getText().toString();
if(ans.trim().equalsIgnoreCase(puzAns.trim()))
{
//show pop-up dialog for right answer
new AlertDialog.Builder(this).setTitle("The Puzzler:")
.setMessage("Wow! Right Answer!!")
.setNeutralButton("Continue", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dlg, int sumthin)
{
android.util.Log.v("IN SIDE function:", " onClick of Dialog");
update();
}
}).show();
}else{
new AlertDialog.Builder(this).setTitle("The Puzzler:")
.setMessage("Sorry! You have to rethink!!")
.setNeutralButton("Continue", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dlg, int sumthin)
{
//do nothing – it will close on its own
}
}).show();
}
}
protected void update() {
score = score + 10;
++puzId;
}
@Override
protected void onResume() {
super.onResume();
setContentView(R.layout.activity_puzzle);
puz = db.getPuzzle(puzId);
if(puz != null)
{
tvPuzContent.setText(puz.getContent());
android.util.Log.v("IN SIDE onResume:", " Content: "+ puz.getContent());
puzAns = puz.getAnswer();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
db.close();
}
}
De l'activité, la disposition est comme suit:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bgimg"
android:layout_gravity="center">
<TableLayout android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_margin="20dp"
android:stretchColumns="*">
<TableRow>
<TextView android:id="@+id/tv_puz_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_span="3"
android:typeface="serif"
android:textStyle="bold"
android:textSize="20sp"
android:text="" />
</TableRow>
<TableRow>
<EditText android:id="@+id/te_puz_ans"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_span="3"
android:hint="Answer" />
</TableRow>
<TableRow android:gravity="center">
<Button android:id="@+id/btn_check"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:hint="Check" />
<Button android:id="@+id/btn_skip"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:hint="Skip" />
<Button android:id="@+id/btn_hint"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:hint="Hint" />
</TableRow>
</TableLayout>
</LinearLayout>
La db de la requête est de retour correctement le contenu qui je peux vérifier par le biais de logcat. Mais l'affichage de texte ne s'affiche pas.L'EditText et les boutons sont affichés.
J'ai essayé diverses options à partir d'autres postes, comme (i )la prise de TextView statique (ii) de recevoir le Contenu de puzzle dans une chaîne de caractères, puis la configuration à travers setText() et d'autres choses, sans succès. Pourriez-vous pls, proposer une solution pour ce.
avez-vous quelque chose dans puz var?
que faites-vous dans ce journal? android.util.Journal.v("À CÔTÉ onResume:", " Contenu: "+ puz.getContent());
Oui. puz est d'avoir tous ses membres de données de valeur de l'ensemble. Et j'obtiens le contenu du puzzle dans le journal ci-dessus: "01-23 22:28:17.937: V/À CÔTÉ onResume:(18673): Contenu: Quelle est la valeur de 2 x 5?'
Est puz.getContent() de type chaîne de caractères? Peut-être que vous appelez une autre surcharge de TextView setText() puis setText(CharSequence texte)...
que faites-vous dans ce journal? android.util.Journal.v("À CÔTÉ onResume:", " Contenu: "+ puz.getContent());
Oui. puz est d'avoir tous ses membres de données de valeur de l'ensemble. Et j'obtiens le contenu du puzzle dans le journal ci-dessus: "01-23 22:28:17.937: V/À CÔTÉ onResume:(18673): Contenu: Quelle est la valeur de 2 x 5?'
Est puz.getContent() de type chaîne de caractères? Peut-être que vous appelez une autre surcharge de TextView setText() puis setText(CharSequence texte)...
OriginalL'auteur Dexter | 2014-01-23
Vous devez vous connecter pour publier un commentaire.
Vous appelez
setContentView(R.layout.activity_puzzle);
dansonResume()
, mais letvPuzContent
variable est instanciée dansonCreate()
, donc il se réfère à la vue texte de l'appel d'origine poursetContentView
dansonCreate
.En gros, d'ici la fin de
onCreate
vous avez attribué à toutes vos variables, mais alorsonResume
est appelée par le système et que vous appelezsetContentView
de nouveau, ce qui jette la disposition d'origine, de sorte que tous vos variables sont dirigés l'un vers ancien vues qui ne sont pas sur l'écran.Il suffit de ne pas appeler
setContentView
dansonResume()
, puisque vous n'êtes pas changer la mise en page de toute façon.Je ne pense pas qu'une boîte de dialogue compte mettre votre activité en arrière-plan--la boîte de dialogue est essentiellement un autre point de Vue au sein de votre Activité. Seulement une autre activité peut rendre votre activité aller dans l'arrière-plan. Si la nouvelle activité est transparent ou pas en plein écran, il ne se déclenchera que onPause/onResume sans déclencher onStop/onRestart/démarrage. Si vous voulez que quelque chose se produise lorsque la boîte de dialogue se ferme, créer une méthode pour elle, et appeler cette méthode à partir du bouton auditeurs de la boîte de dialogue.
C'est le point. J'avais l'impression que lorsque quelque chose bloque une activité, il est "onPaused". Mais ce n'est pas le cas lorsque l'élément de blocage (boîte de Dialogue de ce cas) est une autre composante de l'Activité elle-même. +1 pour cette. Merci.
sauvé ma journée merci
OriginalL'auteur Tenfour04