TimePickerFragment две кнопки

#android #android-timepicker

#Android #android-timepicker

Вопрос:

У меня есть TimePickerFragment и onTimeSet для выполнения действия после выбора времени. Проблема в том, что у меня есть две кнопки для выбора времени, и я не знаю, как узнать, какую из них использовал пользователь. Я пробовал переключать, но это cannot resolve symbol .

есть идеи, как узнать, какую кнопку выбирает пользователь?

 public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener {

...

public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

        switch(view) {
            case R.id.bstart: //cannot resolve symbol
                Toast.makeText(Objects.requireNonNull(getActivity()).getApplicationContext(), "button 1", Toast.LENGTH_SHORT).show();
                break;
            case R.id.bend:
                Toast.makeText(Objects.requireNonNull(getActivity()).getApplicationContext(), "button 2", Toast.LENGTH_SHORT).show();
                break;
        }


    }
  

при необходимости:

мои кнопки:

  <Button
        android:id="@ id/button"
...
/>

 <Button
        android:id="@ id/button2"
...
/>
  

MainActivity (подведение итогов)

 public Button bstart;
public Button bend;

bstart = findViewById(R.id.button);
bend = findViewById(R.id.button2);

bstart.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){
                showTimePickerDialog(v);
            }
        });

bend.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){
                showTimePickerDialog(v);
            }
        });



public void showTimePickerDialog(View v) {
    DialogFragment newFragment = new TimePickerFragment();
    newFragment.show(getSupportFragmentManager(), "timePicker");
}
  

Ответ №1:

Вы можете заставить конструктор для вашего TimePickerFragment использовать идентификатор просмотра. В вашей основной деятельности:

 DialogFragment newFragment = new TimePickerFragment(v.getId());
  

В вашем TimePickerFragment:

 private String viewId;

public TimePickerFragment(String viewId) {
    super();
    this.viewId = viewId;
}
  

Комментарии:

1. v.getId() покажите мне это: TimePickerFragment() in TimePickerFragment cannot be applied to (int)

2. @RickJoe Вы добавили конструктор, который я показываю в своем ответе, к вашему классу TimePickerFragment?

Ответ №2:

Вы могли бы добавить пакет к своему фрагменту.

 public void showTimePickerDialog(View v) {
    DialogFragment newFragment = new TimePickerFragment();
    Bundle args = new Bundle();
    args.putString("","");
    newFragment.setArguments(args);
    newFragment.show(getSupportFragmentManager(), "timePicker");
}
  

Затем в вашем классе fragment вы можете получить аргументы с

 Bundle args = getArguments();
args.getString("","");
  

Вам нужно будет внести соответствующие изменения, поскольку на данный момент я не смог протестировать синтаксис. Но это общая идея того, как вы можете получить параметры во фрагмент.