Mise à jour d'un textview à l'intérieur d'un dialogue personnalisée via un bouton

Donc, mon problème actuel est que je ne peux pas trouver un moyen élégant pour mettre à jour une boîte de dialogue lorsque le bouton est pressé. Je peux réaliser des fonctionnellement le même résultat par rejeter() et show(), mais c'est laid.

Permet de dire que cette boîte de dialogue comporte 3 boutons, pour la vente de widgets que le joueur possède. Tous vendre, de Vendre 10, et Vendre X (montant inscrit avec un EditText). J'aimerais que la boîte de dialogue de persister si le joueur pousse à Vendre 10, mais aussi de mettre à jour c'est textviews avec le nouveau comte de widgets.

Pertinentes partie de l'XML de mise en page de la boîte de dialogue personnaliser:

<LinearLayout android:id="@+id/linearLayout3" android:layout_height="wrap_content" android:layout_width="match_parent">
        <TextView android:id="@+id/sell10Text" android:layout_width="wrap_content" android:text="TextView" android:layout_height="wrap_content" android:layout_weight="2"></TextView>
        <Button android:text="Sell 10" android:enabled="false" android:layout_width="wrap_content" android:id="@+id/sell10Button" android:layout_height="wrap_content" android:layout_weight="1"></Button>
</LinearLayout>

Pertinentes de la boîte de dialogue de création:

final Dialog alert = new Dialog(this);  
alert.setTitle("Sell how many "+(masterRes.get(currentResIndex).getName())+"?");
alert.setContentView(R.layout.selldialog);
TextView tvsellAll = (TextView) alert.findViewById(R.id.sellAllText);
TextView tvsell10 = (TextView) alert.findViewById(R.id.sell10Text);
//etc etc more handles, including buttons
tvsellAll.setText("Sell All ("+String.valueOf(masterRes.get(currentResIndex).getHeld())+") - $"+String.valueOf(calcCost(masterRes.get(currentResIndex).getHeld())));
tvsell10.setText("Sell 10 - $"+String.valueOf(calcCost(10)));
//etc etc more setTexts
btnsell10.setOnClickListener( new OnClickListener() {
public void onClick(View v) {
if (v.isEnabled()) {
int y=masterRes.get(currentResIndex).getHeld();
masterRes.get(currentResIndex).setHeld(y-10);
held -= 10;
money += (calcCost(10));
updateScreen();
alert.tvsellAll.setText("Sell All ("+String.valueOf(masterRes.get(currentResIndex).getHeld())+") - $"+String.valueOf(calcCost(masterRes.get(currentResIndex).getHeld())));
alert.tvsell10.setText("Sell 10 - $"+String.valueOf(calcCost(10)));
alert.tvsellAmt.setText("Sell Amount (0-"+String.valueOf(masterRes.get(currentResIndex).getHeld())+")");
}
}
});
//etc etc other button handlers, alert.show() at the end

Maintenant évidemment la setTexts à l'intérieur du bouton ne peut pas résoudre, car ils ne peuvent pas voir l'alerte que j'ai créé, ils voient juste OnClickListener.

J'ai essayé la manipulation de ce comme je l'ai fait avec ma principale activité du programme de mise à jour updateScreen(), qui est un Runnable, c'est une longue liste de setTexts et/ou l'invalide, et est runOnUiThread(updateScreen). Fonctionne très bien pour les activités de base.

J'ai fait quelques copypasta et essayé de faire un updateSellScreen(), il arrive à accrocher dans la boîte de dialogue personnaliser l'textviews, mais il ne peut pas résoudre l'alerte de classe... je suis un peu perdu maintenant.

Est-ce même possible sans dénigrer tout et tout simplement de créer un affichage personnalisé (dont je suis très opposé à essayer de lutter contre cette nouvelle dans Android de programmation...)

  • Pour clarifier, la ligne: updateScreen(); répertoriés gère uniquement la page principale de l'activité. Je ne peux pas concilier la portée de choses assez pour le faire fonctionner sur le dialogue, d'où la question.
InformationsquelleAutor Eric | 2011-04-19