【问题标题】:Android button class returning incorrect valueAndroid按钮类返回不正确的值
【发布时间】:2012-06-25 22:00:52
【问题描述】:

我对 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"

再次感谢您的任何回答。将积极关注此帖。

【问题讨论】:

    标签: java android windows eclipse class


    【解决方案1】:

    除非您单击按钮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

    希望有帮助!

    【讨论】:

      【解决方案2】:

      这符合预期。你只打电话给buyFromShop。该函数只记录两条消息并返回temp。没有理由将 temp 的值从其初始化值 temp 更改。

      只有在您正确创建活动(使用startActivity)并单击该活动和您对buyFromShop 的调用之间的按钮后,您才会看到temp 的变化。在活动开始之前,按钮根本什么都不做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-04
        • 2013-06-21
        • 2013-02-12
        • 1970-01-01
        • 2014-07-19
        • 1970-01-01
        • 2016-10-09
        相关资源
        最近更新 更多