Итак, моя текущая проблема заключается в том, что я не могу найти элегантный способ обновить диалоговое окно при нажатии кнопки. Функционально я могу достичь того же результата с помощью dismiss () и show (), но это ужасно.
Допустим, в этом диалоговом окне есть 3 кнопки для продажи виджетов, которые есть у игрока. Продать все, продать 10 и продать X (сумма, введенная с помощью EditText). Я бы хотел, чтобы диалоговое окно сохранялось, если игрок нажимает «Продать 10», но также обновляет его текстовые представления новым счетчиком виджетов.
Соответствующая часть макета XML настраиваемого диалогового окна:
<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>
Соответствующая часть создания диалога:
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
Теперь очевидно, что setTexts внутри кнопки не могут разрешиться, поскольку они не могут видеть созданное мной предупреждение, они просто видят OnClickListener.
Я попытался обработать это так же, как я делал с помощью средства обновления моего основного действия updateScreen (), которое является Runnable
, то есть длинным списком setTexts и / или недействительными, и является runOnUiThread(updateScreen)
. Прекрасно работает для основной деятельности.
Я сделал несколько копий пасты и попытался создать updateSellScreen (), заставить его подключаться к текстовым представлениям настраиваемого диалога, но он не может разрешить класс предупреждений ... Я сейчас немного потерялся.
Возможно ли это, даже не разрушая все и просто создавая собственное представление (которое я очень не хочу пытаться заняться этим заново в программировании на Android ...)