我正在构建一个我正在使用ListView
的应用程序。目前,当用户单击ListView的一行时,将执行以下代码。此代码基本上删除了与所选行有关的一些数据。该代码是MainActivity.class的一个片段。
//understanding this code is not crucial. list is the ListView, adapter is an
//ArrayAdapter object and displayDataMap is a Hashmap object.
list.setOnItemLongClickListener(new OnItemLongClickListener(){
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View view, int position, long id) {
String key = adapter.getItem(position); //position of ListView row
String data = displayDataMap.get(key);
displayDataMap.remove(key);
//"aqlpzaml" is used as a regex.
String addressee = data.split("aqlpzaml")[1];
long time = Long.valueOf(data.split("aqlpzaml")[0]);
int finalID = Integer.valueOf(data.split("aqlpzaml")[3]);
String dateTime = sdf.format(time);
adapter.remove(addressee + " " + dateTime);
adapter.notifyDataSetChanged();
}
现在我希望在删除此数据之前,系统会提示用户Dialog
,询问他是否确定要进行更改。
我知道如何创建Dialog
并显示它。但我不知道如何根据adapter
输入触发displayDataMap
和Dialog
值的更改。我想如果我将使用另一个类来创建Dialog
对象(使用DialogFragment
),那么我将无法访问MainActivity
中的setPositiveButton()
类的私有变量1}}该对话框。
有什么建议吗?
感谢。
答案 0 :(得分:1)
只需在onItemLongClick中插入对话框创建,并使适配器“适配器”,“收件人”和“日期时间”最终,这样您就可以在setPositiveButton()方法中访问它。
因为我不知道您的适配器是如何创建的,它应该看起来像这样,并且与list.setOnItemLongClickListener或类变量的功能相同:
final ArrayAdapter<String> adapter = ...
也是您的数据地图:
final Hashmap<String, ...> displayDataMap = ...
你的功能应如下所示:
list.setOnItemLongClickListener(new OnItemLongClickListener(){
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View view, int position, long id)
{
final String key = adapter.getItem(position); //position of ListView row
String data = displayDataMap.get(key);
//"aqlpzaml" is used as a regex.
final String addressee = data.split("aqlpzaml")[1];
long time = Long.valueOf(data.split("aqlpzaml")[0]);
int finalID = Integer.valueOf(data.split("aqlpzaml")[3]);
final String dateTime = sdf.format(time);
Builder dialog = new Builder(view.getContext());
dialog
.setMessage("Want to delete?")
.setPositiveButton("delete",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
displayDataMap.remove(key);
adapter.remove(addressee + " " + dateTime);
adapter.notifyDataSetChanged();
}
})
.setNegativeButton("cancel",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
dialog.cancel();
}
});
dialog.create().show();
}
}