Android按钮类返回不正确的值

时间:2012-06-25 22:00:52

标签: java android windows eclipse class

我是Android开发和Java的新手。已阅读但我在这个问题上无处可去。

我有一个按钮,点击它时应该将变量A的值设置为“购买的项目”。 但是,我只获得在类中首次定义变量时使用的值。

对于那些像我这样学习的人 - 这个主题有望为那些刚开始的人提供一个很好的参考。

代码是:

public class shopView extends Activity
{

    String temp = "temp";

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.shopview);


        Button btnRef1 = (Button) findViewById(R.id.btnbtnRef11);
        final TextView ConfirmPurchasetest = (TextView) findViewById(R.id.tvMigName);

        btnRef1.setOnClickListener(new View.OnClickListener()
        {   
            @Override
            public void onClick(View v) {
                temp = "passed value";
                ConfirmPurchasetest.setText("item Purchased");
                buyFromShop();
                Log.v("after button push", "temp");
                };
        });

    }
    public String buyFromShop(){
        Log.v("button push", "after buy from shop");
        Log.v("temp variable",temp);
        return temp;
    }

}

并使用以下方法调用:

shopcheckout = shop.buyFromShop();

Log.v("Value in myView",shopcheckout);

预计:shopcheckout =“购买的商品” 实际:shopcheckout =“temp”

再次感谢您的回答。将积极监督这篇文章。

2 个答案:

答案 0 :(得分:0)

这是预期的。您只拨打buyFromShop。该函数仅记录两条消息并返回temp。没有理由认为temp的值应该从其初始化值temp更改。

只有在您正确创建活动后(使用startActivity),然后点击该活动与您对buyFromShop的通话之间的按钮,您才会看到temp的更改。在活动开始之前,该按钮根本不做任何事情。

答案 1 :(得分:0)

除非您点击按钮btnRef1,否则buyFromShop()将始终返回“temp”。

如果您在onCreate()中添加此代码:

temp = "Changing the string.";

现在,buyFromShop()将返回“更改字符串。”。

如果您希望buyFromShop()返回ConfirmPurchasedtest的值,请将您的代码更改为:

public class shopView extends Activity
{
    TextView confirmPurchaseTest;
    String temp = "temp";

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.shopview);

        Button btnRef1 = (Button) findViewById(R.id.btnbtnRef11);
        confirmPurchaseTest = (TextView) findViewById(R.id.tvMigName);

        btnRef1.setOnClickListener(new View.OnClickListener()
        {   
            @Override
            public void onClick(View v) {
                temp = "passed value";
                confirmPurchaseTest.setText("item Purchased");
                buyFromShop();
                Log.v("after button push", "temp");
            }
        });
    }

    public String buyFromShop(){
        Log.v("button push", "after buy from shop");
        Log.v("temp variable", temp);

        // Change this!
        return confirmPurchaseTest.getText().toString();
    }

}

根据命名约定,像shopView这样的类名应该使每个单词的首字母大写;所以ShopView。像ConfirmPurchasetest这样的变量应该以小写字母开头,然后将每个单词大写(在第一个单词之后),所以confirmPurchaseTest

希望有所帮助!