根据Dialog的输入修改MainActivity变量

时间:2013-04-04 20:01:19

标签: android android-alertdialog

我正在构建一个我正在使用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输入触发displayDataMapDialog值的更改。我想如果我将使用另一个类来创建Dialog对象(使用DialogFragment),那么我将无法访问MainActivity中的setPositiveButton()类的私有变量1}}该对话框。

有什么建议吗?

感谢。

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();
    }
}