通过按钮在自定义对话框内更新textview

| 因此,我当前的问题是,当按下按钮时,我找不到一种优雅的方式来更新对话框。我可以通过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
现在,很明显,按钮内的setText无法解析,因为它们看不到我创建的警报,因此只能看到OnClickListener。 我尝试像处理主活动的updater updateScreen()一样处理此问题,该更新屏幕为
Runnable
,它是setTexts和/或invalidates的长列表,为is3ѭ。非常适合基础活动。 我做了一些copypasta并尝试制作一个updateSellScreen(),使其挂接到自定义对话框的文本视图中,但是它无法解析警报类……我现在有点迷失了。 甚至不浪费所有内容并仅创建自定义视图,是否有可能做到这一点(我非常反对尝试将新问题引入Android编程...)
已邀请:
最后声明您的TextViews。您仍然可以设置他们的文本,这仅意味着您将无法重新分配变量引用。不要执行alert.tv,因为TextView并非对话框的实例变量,而是用于创建对话框的方法。这是简单的方法。您还可以将TextViews声明为Activity的实例变量,然后通过处理程序对其进行更新。
alert.setTitle(\"Sell how many \"+(masterRes.get(currentResIndex).getName())+\"?\");
alert.setContentView(R.layout.selldialog);
final TextView tvsellAll = (TextView) alert.findViewById(R.id.sellAllText);
final 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();
               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)));
               tvsellAmt.setText(\"Sell Amount (0-\"+String.valueOf(masterRes.get(currentResIndex).getHeld())+\")\");


           }
        }
    });
在创建对话框的活动中,可以声明对话框,文本视图等的私有变量,然后可以在活动中的任何位置访问它们。
        dialogA = new Dialog(myActivity.this, android.R.style.Theme_Dialog);
    dialogA.setContentView(R.layout.myDialog);
    // ...      
    tv1 = (TextView) dialogA.findViewById(R.id.textView1);

    Button b1 = (Button) dialogA.findViewById(R.id.button1);
    b1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            String s1 = tv1.getText().toString();
            Toast.makeText(myActivity.this, s1, Toast.LENGTH_SHORT).show();
            dialogA.cancel();
        }
    });

    dialogA.show();

要回复问题请先登录注册