Как получить позицию элемента в диалоге фрагмента 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;
}