установка будильника на отдельных карточках в cardView, продолжает превышать время первой карточки - PullRequest
0 голосов
/ 16 июня 2019

Я хочу установить отдельные сигналы тревоги, используя карты в cardView с адаптером и TimePickerFragment, он работает с одной картой, но перезаписывает сигнал тревоги на первую карту независимо от того, какую другую карту я выберу, нужно ли добавить метод в мой адаптер класс для карты с использованием позиции с карты ArrayList? Я просто пытаюсь показать, сколько времени я выбрал из TimePickerFragment на каждой отдельной карте

Java

`открытый класс myAdapter расширяет RecyclerView.Adapter {

private ArrayList<CardDataHolder> dataList;
private OnItemClickListener listener;

//put interface methods here for items on the card actions
public interface OnItemClickListener
{
    void onItemClicked(int pos);
    void Delete(int pos);
    void alarmSet(int pos);
}

public void setOnItemClickListener(OnItemClickListener listener)
{
    this.listener = listener;
}

//this class set values and defines the OnclickListener method for item click
public static class myViewHolder extends RecyclerView.ViewHolder
{
    public ImageView image;
    public TextView text;
    public ImageView imgAlarm;


    public myViewHolder(@NonNull View itemView, OnItemClickListener listener) {
        super(itemView);

        //put the findById method here to set inputs
        image = itemView.findViewById(R.id.cardDelete);
        text = itemView.findViewById(R.id.txtCard);
        imgAlarm = itemView.findViewById(R.id.imgAlarm);

        //when the who card is clicked
        itemView.setOnClickListener((v) -> {
            if(listener != null)
            {
                int pos = getAdapterPosition();
                if(pos != RecyclerView.NO_POSITION)
                {
                    listener.onItemClicked(pos);
                }
            }
        });

        //when the image X is clicked
        image.setOnClickListener((v)-> {
            if(listener != null)
            {
                int pos = getAdapterPosition();
                if(pos != RecyclerView.NO_POSITION) {
                    listener.Delete(pos);
                }
            }
        });

        imgAlarm.setOnClickListener((V)->{
            if(listener != null)
            {
                int pos = getAdapterPosition();
                if(pos != RecyclerView.NO_POSITION) {
                    listener.alarmSet(pos);
                }
            }
        });
    }
}

public myAdapter(ArrayList<CardDataHolder> data)
{
    dataList = data;
}

@NonNull
@Override
public myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int i) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cards,

родитель, ложь); myViewHolder holder = new myViewHolder (view, listener); возврат владельца; }

@Override
public void onBindViewHolder(@NonNull myViewHolder ViewHolder, int pos) {

    //current item of the card
    CardDataHolder currentItem = dataList.get(pos);

    //sets the text view with the data on card so each card is matched with the correct
    //data
    ViewHolder.text.setText(currentItem.getText());
}

//returns he size of array of cards
@Override
public int getItemCount() {
    if(dataList == null) {
        return 0;
    }
    else
    {
        return dataList.size();
    }
}

//remove cards when the X is clicked on the card
public void removeAt(int position) {
    dataList.remove(position);
    notifyItemRemoved(position);
    notifyItemRangeChanged(position, dataList.size());
}

} `

'открытый класс TimePickerFragment extends DialogFragment { @NonNull @Override общедоступный диалог onCreateDialog (@Nullable Bundle saveInstanceState) {

    Calendar calendar = Calendar.getInstance();
    int hour = calendar.get(Calendar.HOUR_OF_DAY);
    int min  = calendar.get(Calendar.MINUTE);
    return new TimePickerDialog(getActivity(), new TimePickerDialog.OnTimeSetListener() {
        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            TextView viewAlarmTime = getActivity().findViewById(R.id.viewAlarmTime);
            //TODO only sets one entry need to make it set for all cards
            viewAlarmTime.setText(String.format("%02d:%02d", hourOfDay, minute));

        }
    }, hour, min, android.text.format.DateFormat.is24HourFormat(getActivity()));

}'

в основном

'adapter.setOnItemClickListener (новый myAdapter.OnItemClickListener () { @Override public void onItemClicked (int pos) { Toast.makeText (getApplicationContext (), String.valueOf (pos), Toast.LENGTH_LONG) .show ();

            dialogAlert(pos);
        }

        @Override
        public void Delete(int pos) {
            adapter.removeAt(pos);
            write(getApplicationContext(), cardData);
        }

        @Override
        public void alarmSet(int pos) {
            //TODO make this pop up a clock fragment setter and display it
            Toast.makeText(getApplication(), "Set Alarm" + pos, Toast.LENGTH_LONG).show();
            DialogFragment timePicker = new TimePickerFragment();
            timePicker.showNow(getSupportFragmentManager(), "time picker");
        }
    }); '
...