Как получить позицию элемента в диалоге фрагмента Android

У меня есть два фрагмента Alertdialog в моем приложении. Если пользователь нажмет на первое диалоговое окно с предупреждением, он получит второе диалоговое окно с предупреждением, в котором он найдет какой-нибудь список действий. Теперь первый alerttdialog работает правильно до сих пор. Но во втором диалоговом окне с предупреждением я хочу указать позицию, по которой пользователь может получить правильную информацию, основываясь на клике. предположим, что если пользователь щелкнет компанию 1, он получит телефон и электронную почту компании 2, точно так же, как если он нажмет на вторую компанию, диалоговое окно предоставит информацию о второй компании. Но я не понимаю, как я могу это реализовать. Вот мой код для первого и второго диалоговых окон оповещения. Также это хороший способ написать телефон и электронную почту. или есть ли другой способ реализовать это.

Я решил проблему с помощью кода ответа. вот мой решенный код для вопроса

Решенный код

public class FirstAlerDialogFragment extends DialogFragment {

    private ListView listView;
    private Button cancelButton;
    private String[] companyName;
    private TextView title;
    private ArrayAdapter<String> adapter;

    public FirstAlerDialogFragment() {

    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setCancelable(true);
        setStyle(DialogFragment.STYLE_NORMAL, R.style.DialogStyle);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.first_alertlist_contact, container, false);

        //Button,ListView1 Initialization
        listView=(ListView) rootView.findViewById(listView1);
        cancelButton=(Button) rootView.findViewById(R.id.cancel_button);
        title=(TextView)rootView.findViewById(R.id.title);
        title.setText("Contact");
        // Defined Array values to show in ListView
        companyName = getResources().getStringArray(R.array.company_name);

        //Create and set Adepter TO ListView1
        adapter=new ArrayAdapter<String>(getActivity(), R.layout.first_alertlist_textstyle,android.R.id.text1,companyName);
        listView.setAdapter(adapter);

        cancelButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dismiss();
            }
        });

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                // ListView Clicked item index
                int itemPosition = position;

                if (itemPosition == 0) {
                    dismiss();

            FragmentManager fm = getFragmentManager();
            Bundle args = new Bundle();
            args.putInt("position", itemPosition);
            ContactWayFragment dialogFragment = new ContactWayFragment ();
            dialogFragment.show(fm, "dialogFragment");
            dialogFragment.setArguments(args);
            dialogFragment.show(getChildFragmentManager(), null); }
            }
        });
        return rootView;
    }
}

Диалог второго оповещения

public class SecondAlertDialogFragment extends DialogFragment {

    private ListView listView;
    private Button cancelButton;
    private String[] contactWay;
    private TextView title;
    private ArrayAdapter<String> adapter;
    private int position;
    private String phoneNumber, email;

    public SecondAlertDialogFragment() {

    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle args) {

        View rootView = inflater.inflate(R.layout.first_alertlist_contact, container, false);

        //Button,ListView1 Initialization
        listView=(ListView) rootView.findViewById(listView1);
        cancelButton=(Button) rootView.findViewById(R.id.cancel_button);
        title=(TextView)rootView.findViewById(R.id.title);
        title.setText("What do you want to do");
        // Defined Array values to show in ListView
        contactWay = getResources().getStringArray(R.array.contact_way);

        //Create and set Adepter TO ListView1
        adapter=new ArrayAdapter<String>(getActivity(), R.layout.first_alertlist_textstyle,android.R.id.text1,contactWay);
        listView.setAdapter(adapter);

        cancelButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dismiss();
            }
        });


        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                // ListView Clicked item index

                Bundle args = getArguments();
                args = getArguments();
                int itemPosition = args.getInt("position");
                switch (itemPosition) {
                    case 0:
                        phoneNumber = "12345";
                        email="mail.com";
                        break;
                    case 1:
                        phoneNumber = "1246";
                        email="mail2.com";
                        break;
                    case 2:
                        phoneNumber = "8780";
                        email="mail3.com";
                        break;
                    case 3:
                        phoneNumber = "123456";
                        email="mail4.com";
                        break;
                }
                int item = position;

                if (item == 0) {
                    dismiss();
                    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

                    builder.setTitle("Email to " + email);

                    builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            // Do nothing
                            dialog.dismiss();
                        }
                    });
                    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            // Do nothing
                            dialog.dismiss();
                        }
                    });

                    AlertDialog alert = builder.create();
                    alert.show();
                }
                if (item == 1) {
                    dismiss();
                    Toast.makeText(getActivity(), "click 1", Toast.LENGTH_SHORT).show();
                }
                if (item == 2) {
                    dismiss();
                    Toast.makeText(getActivity(), "click 2", Toast.LENGTH_SHORT).show();
                }
                if (item == 3) {
                    dismiss();
                }

            }
        });
        return rootView;
    }
}

1 ответ

Решение

Вы можете использовать Bundle для отправки данных между фрагментами. Смотрите ссылку

В вашем FirstAlerDialogFragment:

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        int itemPosition = position;
        Bundle args = new Bundle();
        args.putInt("position", itemPosition);
        SecondAlertDialogFragment fragment = new SecondAlertDialogFragment;
        fragment.setArguments(args);
        fragment.show(getChildFragmentManager(), null);
     }

А также SecondAlertDialogFragment:

Bundle args = getArguments();
int position = args.getInt("position");
switch (position) {
            case 0:
                phoneNumber = "12345";
                email="mail.com";
                break;
            case 1:
                phoneNumber = "1246";
                email="mail2.com";
                break;
            case 2:
                phoneNumber = "8780";
                email="mail3.com";
                break;
            case 3:
                phoneNumber = "123456";
                email="mail4.com";
                break;
            }
Другие вопросы по тегам