1

私のAndroidアプリケーションでは、ユーザーがSalesボタンをクリックすると、販売を実行する別のビューが表示されます。

選択した顧客の GST ライセンスの有効期限が 7 日未満で、間もなく期限切れになる場合に、ユーザーに警告メッセージを表示する警告ダイアログを実装する前に、私のアプリケーションは問題なく動作しています。finalこれら 2 つの変数を宣言しないと、次のエラー メッセージが表示customerされますv

customer別のメソッドで定義された内部クラス内の非最終変数を参照することはできません

v別のメソッドで定義された内部クラス内の非最終変数を参照することはできません

という事は承知しています

final として宣言された参照は、初期化されると変更できません。

では、これら 2 つの変数を として代入するとどうなるでしょうfinalか? 常に同じ値が含まれていますか? finalコンパイラがこれらのエラーを表示する理由と、これら2つの変数を宣言する必要がある理由を誰かが説明してもらえますか?

ここに私のソースコードがあります:

private OnClickListener salesBtnClick = new OnClickListener() {
    @Override
    public void onClick(View v) {
        Customer customer = salesCustAdpt.getSelectedCustomer();
        if (customer != null) {                                
            Date expiryDate = customer.getGSTLicenseExpiryDate();
            if (checkCustomerGSTLicenseExpiryDate(expiryDate)) {
                AlertDialog.Builder builder = new AlertDialog.Builder(SalesCustomerActivity.this);
                builder.setCancelable(false)
                    .setPositiveButton(
                        "OK",
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                try {
                                    //Perform sales here!
                                    Intent intent = null;
                                    intent = new Intent(v.getContext(), SalesActivity.class);//Error msg here!
                                    Bundle bundle = new Bundle();
                                    bundle.putSerializable("selCustomer", customer);//Error msg here!
                                    intent.putExtra("bundle", bundle);
                                    startActivity(intent);
                                    finish();
                                } catch (Exception ex) {
                                    AddPlusUtil.displayErrorMsg(
                                                    SalesCustomerActivity.this,
                                                    ex);
                                }
                            }
                        });

                AlertDialog alert = builder.create();
                alert.setTitle("Warning Message");
                String errMsg = "GST License Expiry Date of selected customer is \n" + expiryDate + " and going to expire soon.";
                alert.setMessage(errMsg);
                alert.setIcon(android.R.drawable.stat_notify_error);
                alert.show();
            } else {
                //Perform Sales
            }
        } 
    }
}
4

2 に答える 2

2

Customer を定義するときは、final を使用します。

final Customer customer = salesCustAdpt.getSelectedCustomer();

また、onClick メソッドで、View を final に設定します。

public void onClick(final View v) {

お役に立てれば :)

于 2013-10-03T03:46:12.060 に答える
1

customerそれをクラスで vグローバルに定義します。それは問題を解決します。

1 つのグローバル ビュー オブジェクトを作成し、それをv

globalView = v;

そのglobalViewを使用してインテントを呼び出します。

ちなみにyourClass.this、ビューコンテキストの代わりにコンテキストとして使用できます。

于 2013-10-03T03:41:10.333 に答える