大家好日子!我会试着描述我的问题。这是建筑范围内的东西......我相信。那么,让我们开始吧。
我有一个活动,用户可以创建新玩家或点击list
并获取已创建的玩家列表。所以在activity.java中我创建DatabaseHelper
和SQLiteDatabase
并将其用于INSERT
(如果是新玩家)或SELECT
(如果玩家选择现有玩家)。要填写列表,请使用ListView
和Adapter
。
当用户点击(简称)列表中的玩家姓名时,他会得到AlertDialog
,问题是“你想继续播放玩家XXX吗?”如果不是,我只是取消,如果是,我取名字,创建intent
并开始另一个activity
,其中玩家名称已转移intent.putExtra("name", LoginDialog.selectedName))
到另一个activity
。那太好了。但现在我想让用户删除播放器。这个想法是 - 经过长时间的点击,用户得到AlertDialog
问题“你真的想删除玩家XXX吗?”不 - 很明显 - 取消。但是如何应对YES?
粗略地说 - 在“是”之后,我必须连接到DB
并执行DELETE
查询。我是怎么试的:
public class DeleteDialog {
AlertDialog.Builder ad;
public static Context context;
public static String selectedName;
public DatabaseHelper mDatabaseHelper;
public SQLiteDatabase mSqLiteDatabase;
public void dialogOfSelectedName(Context context, String selectedName) {
context = this.context;
selectedName = this.selectedName;
ad = new AlertDialog.Builder(context);
ad.setTitle("Удаление игрока");
ad.setMessage("Удалить игрока " + selectedName + "?");
ad.setCancelable(true);
mDatabaseHelper = new DatabaseHelper(context, "mydatabase.db", null, 1);
mDatabaseHelper.getReadableDatabase();
mSqLiteDatabase = mDatabaseHelper.getWritableDatabase();
ad.setNegativeButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mSqLiteDatabase.execSQL("DELETE FROM" + DatabaseHelper.DATABASE_TABLE + " WHERE " + DatabaseHelper.NAME_COLUMN + " LIKE '" + selectedName + "'");
}
});
ad.setPositiveButton("NO", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
AlertDialog alert = ad.create();
alert.show();
}
}
问题是selectedName
无法从重写方法onClick
中看到,但我在查询中需要它。怎么实现呢?或者我的做法完全错了?请帮忙提出建议。
谢谢!
答案 0 :(得分:1)
将变量设为final
。您可以使用onClick
方法访问它。
更改
public void dialogOfSelectedName(Context context, String selectedName)
到
public void dialogOfSelectedName(Context context, final String selectedName)