0

私は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"

回答ありがとうございます。この投稿を積極的に監視します。

4

2 に答える 2

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

お役に立てば幸いです。

于 2012-06-25T22:38:56.287 に答える
0

これは予想通りです。呼び出しているのはbuyFromShop。この関数は2つのメッセージのみをログに記録し、を返しますtemptempの値を初期化値である。から変更する必要がある理由はありませんtemp

(を使用して)アクティビティを適切に作成し、startActivityそれとへの呼び出しの間のボタンをクリックした後でのみbuyFromShop、の変更が表示されますtemp。アクティビティが開始される前は、ボタンは何もしません。

于 2012-06-25T22:28:23.870 に答える