从多选对话框中返回选中的项目

时间:2016-03-04 00:46:43

标签: java android

通过阅读documentation,我设法创建了一个多选对话框。然而,还有一点让我完全难过。当用户点击"好的"时,如何将它们返回到父活动?

我指的是这个特别评论:

 // Set the action buttons
       .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
           @Override
           public void onClick(DialogInterface dialog, int id) {
               // User clicked OK, so save the mSelectedItems results somewhere
               // or return them to the component that opened the dialog
               ...
           }

我究竟如何将它们返回到打开对话框的组件?

我的活动中的对话:

 public void chooseTeam(View v) {;
    DialogFragment newDialog = MultiChoiceDialog.newInstance(teamNamesArray);
    newDialog.show(getFragmentManager(), "Choose_team");

}

和我的对话框代码:

public Dialog onCreateDialog(Bundle savedInstanceState) {
    final String[] team = getArguments().getStringArray("team");
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setTitle(R.string.choose_team).setMultiChoiceItems(team, null, new DialogInterface.OnMultiChoiceClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which, boolean isChecked) {
            if (isChecked) {
                list.add(team[which]);
            } else if (list.contains(team[which])) {
                list.remove(team[which]);
            }
        }
    }).setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            String selections = "";
            for (String ms : list) {
                selections = selections + "\n" + ms;
            }
            Toast.makeText(getActivity(), "Team Selected: " + selections,
                    Toast.LENGTH_LONG).show();
            AddTaskActivity.chosenTeam =  list;
        }
    }).setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
            Toast.makeText(getActivity(), "Cancelled.", Toast.LENGTH_SHORT).show();
        }
    });

    return builder.create();
}

1 个答案:

答案 0 :(得分:0)

您可以将ArrayList设为类成员变量,如private ArrayList mSelectedItems;

请参阅下面的示例代码

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

private ArrayList mSelectedItems;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button button = (Button)findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mSelectedItems = new ArrayList();
            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            // Set the dialog title
            builder.setTitle(R.string.pick_toppings)
                    // Specify the list array, the items to be selected by default (null for none),
                    // and the listener through which to receive callbacks when items are selected
                    .setMultiChoiceItems(R.array.toppings, null,
                            new DialogInterface.OnMultiChoiceClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which,
                                                    boolean isChecked) {
                                    if (isChecked) {
                                        // If the user checked the item, add it to the selected items
                                        mSelectedItems.add(which);
                                    } else if (mSelectedItems.contains(which)) {
                                        // Else, if the item is already in the array, remove it
                                        mSelectedItems.remove(Integer.valueOf(which));
                                    }
                                }
                            })
                            // Set the action buttons
                    .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int id) {
                            // User clicked OK, so save the mSelectedItems results somewhere
                            // or return them to the component that opened the dialog

// in this case the OK button has more or less no function but if want save the check options in database or shared preference, you can put your code here. So it depends on your use case.

                        }
                    })
                    .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int id) {
                            dialog.dismiss();
                        }
                    });
            AlertDialog alertDialog = builder.create();
            alertDialog.show();
        }
    });

  }
}