0

我正在构建一个使用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的变化。我想如果我使用另一个类来创建一个对象(使用),那么我将无法在该对话框中访问类的私有变量。displayDataMapDialogDialogDialogFragmentMainActivitysetPositiveButton()

有什么建议么 ?

谢谢。

4

1 回答 1

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();
    }
}
于 2013-04-04T20:16:12.313 回答