私の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
}
}
}
}