Android 如何检查我的recyclerView中的单个切换按钮是否已选中?

Android 如何检查我的recyclerView中的单个切换按钮是否已选中?,android,android-studio,android-recyclerview,togglebutton,Android,Android Studio,Android Recyclerview,Togglebutton,我正在创建一个应用程序,允许用户创建警报,如果警报被打开,那么它将使用广播接收器唤醒用户。我目前遇到的问题是检查是否选中了recyclerView中的toggleButton。我需要检查每一个都是否开启,如果开启,请在设定的时间唤醒用户。非常感谢您的帮助 主要活动: package com.example.routineclock_alarmclockhabitbuilder; import android.app.AlarmManager; import android.app.Pendin

我正在创建一个应用程序,允许用户创建警报,如果警报被打开,那么它将使用广播接收器唤醒用户。我目前遇到的问题是检查是否选中了recyclerView中的toggleButton。我需要检查每一个都是否开启,如果开启,请在设定的时间唤醒用户。非常感谢您的帮助

主要活动:

package com.example.routineclock_alarmclockhabitbuilder;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TimePicker;
import android.widget.Toast;
import android.widget.ToggleButton;


import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.google.android.material.floatingactionbutton.FloatingActionButton;

import java.util.ArrayList;
import java.util.Calendar;

public class MainActivity extends AppCompatActivity {
    private RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;
    ToggleButton toggleButton;
    FloatingActionButton addButton;
    AlarmManager alarmManager;
    PendingIntent pendingIntent;
    ArrayList<Item> myList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        addButton = findViewById(R.id.fab);

        addButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), CreateAlarmObject.class);
                startActivity(intent);
            }
        });

        myList = new ArrayList<>();

        for(int i = 0; i < myList.size(); i++) {
            myList.get(i).setText1("Alarm " + (i + 1));
        }

        mRecyclerView = findViewById(R.id.recyclerView);
        mRecyclerView.setHasFixedSize(true);
        mLayoutManager = new LinearLayoutManager(this);
        mAdapter = new Adapter(myList, false);
        mRecyclerView.setLayoutManager(mLayoutManager);
        new ItemTouchHelper(itemTouchHelperCallback).attachToRecyclerView(mRecyclerView);
        mRecyclerView.setAdapter(mAdapter);
    }



    @Override
    protected void onResume() {
        super.onResume();
        if (getIntent().hasExtra("addedObject")) {
            Item newItem = getIntent().getParcelableExtra("addedObject");
            myList.add(newItem);
            Log.d("Resume", "Item added");
        }
        else {
            Log.d("Resume", "Does not have extra");
        }

        for(int i = 0; i < myList.size(); i++) {
            myList.get(i).setText1("Alarm " + (i + 1));
        }
    }

    public void OnToggleClicked(View view) {

        Log.d("Toggled", "Successfully toggled.");
        alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

        long time;
        if ((mAdapter.) {
            Toast.makeText(MainActivity.this, "ALARM ON", Toast.LENGTH_SHORT).show();
            Calendar calendar = Calendar.getInstance();
            //Log.d("Toggle on", "Current hour: " + String.valueOf(cur);

            // calender is called to get current time in hour and minute

            //calendar.set(Calendar.HOUR_OF_DAY, extras.getInt("currentHour"));
            //calendar.set(Calendar.MINUTE, extras.getInt("currentMinute"));
            // using intent i have class AlarmReceiver class which inherits
            // BroadcastReceiver
            Intent intent = new Intent(this, AlarmReceiver.class);

            // we call broadcast using pendingIntent
            pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

            time = (calendar.getTimeInMillis() - (calendar.getTimeInMillis() % 60000));

            if (System.currentTimeMillis() > time) {
                // setting time as AM and PM
                if (calendar.AM_PM == 0)
                    time = time + (1000 * 60 * 60 * 12);
                else
                    time = time + (1000 * 60 * 60 * 24);
            }
            // Alarm rings continuously until toggle button is turned off

            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, time, 10000, pendingIntent);
            //alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (time * 1000), pendingIntent);

        } else {
            Intent intent = new Intent(this, AlarmReceiver.class);
            pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
            alarmManager.cancel(pendingIntent);
            Toast.makeText(MainActivity.this, "ALARM OFF", Toast.LENGTH_SHORT).show();
        }
    }

    ItemTouchHelper.SimpleCallback itemTouchHelperCallback = new ItemTouchHelper.SimpleCallback(0 , ItemTouchHelper.RIGHT) {
        @Override
        public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
            return false;
        }

        @Override
        public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
            myList.remove(viewHolder.getAdapterPosition());
            mAdapter.notifyDataSetChanged();
        }
    };
}
package com.example.routineclock\u alarmclockhabitbuilder;
导入android.app.AlarmManager;
导入android.app.pendingent;
导入android.content.Intent;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.Button;
导入android.widget.TimePicker;
导入android.widget.Toast;
导入android.widget.ToggleButton;
导入androidx.annotation.NonNull;
导入androidx.appcompat.app.appcompat活动;
导入androidx.recyclerview.widget.ItemTouchHelper;
导入androidx.recyclerview.widget.LinearLayoutManager;
导入androidx.recyclerview.widget.recyclerview;
导入com.google.android.material.floatingactionbutton.floatingactionbutton;
导入java.util.ArrayList;
导入java.util.Calendar;
公共类MainActivity扩展了AppCompatActivity{
私人回收视图mRecyclerView;
专用回收器查看适配器mAdapter;
private RecyclerView.LayoutManager MLLayoutManager;
切换按钮切换按钮;
浮动操作按钮添加按钮;
AlarmManager AlarmManager;
下垂的下垂的;
ArrayList myList;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addButton=findViewById(R.id.fab);
addButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Intent Intent=new Intent(getApplicationContext(),CreateAlarmObject.class);
星触觉(意向);
}
});
myList=新的ArrayList();
对于(int i=0;i时间){
//将时间设置为上午和下午
如果(calendar.AM\u PM==0)
时间=时间+(1000*60*60*12);
其他的
时间=时间+(1000*60*60*24);
}
//警报持续响起,直到切换按钮关闭
alarmManager.setRepeating(alarmManager.RTC_唤醒,时间,10000,挂起);
//alarmManager.set(alarmManager.RTC_唤醒,System.currentTimeMillis()+(time*1000),PendingEvent);
}否则{
意向意向=新意向(此为AlarmReceiver.class);
PendingEvent=PendingEvent.getBroadcast(this,0,intent,PendingEvent.FLAG_UPDATE_CURRENT);
alarmManager.cancel(挂起事件);
Toast.makeText(MainActivity.this,“报警关闭”,Toast.LENGTH_SHORT.show();
}
}
ItemTouchHelper.SimpleCallback itemTouchHelperCallback=新建ItemTouchHelper.SimpleCallback(0,ItemTouchHelper.RIGHT){
@凌驾
公共布尔onMove(@NonNull RecyclerView RecyclerView,@NonNull RecyclerView.ViewHolder ViewHolder,@NonNull RecyclerView.ViewHolder target){
返回false;
}
@凌驾
公共void onsweed(@NonNull RecyclerView.ViewHolder ViewHolder,int-direction){
myList.remove(viewHolder.getAdapterPosition());
mAdapter.notifyDataSetChanged();
}
};
}
适配器

package com.example.routineclock_alarmclockhabitbuilder;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.ToggleButton;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;

public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {

    private ArrayList<Item> mList;


        public static class ViewHolder extends RecyclerView.ViewHolder {

            public ImageView mImageView;
            public TextView mTextView1;
            public TextView mTextView2;
            public ToggleButton mToggleButton;

            public ViewHolder(@NonNull View itemView) {
                super(itemView);
                mImageView = itemView.findViewById(R.id.imageView);
                mTextView1 = itemView.findViewById(R.id.textView);
                mTextView2 = itemView.findViewById(R.id.textView2);
                mToggleButton = itemView.findViewById(R.id.toggleButton);
            }
        }

        public Adapter(ArrayList<Item> exampleList, boolean toggleOn) {

            mList = exampleList;
        }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.example_item, parent, false);
        ViewHolder evh = new ViewHolder(v);
        return evh;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

            holder.mToggleButton.setChecked(mList.get(position).getToggleOn());
        Item currentItem = mList.get(position);

        holder.mImageView.setImageResource(currentItem.getImageResource());
        holder.mTextView1.setText(currentItem.getText1());
        holder.mTextView2.setText(currentItem.getText2());

    }

    @Override
    public int getItemCount() {
        return mList.size();
    }

    public void toggleItemOn(int position){
        mList.get(position).setToggleOn(true);
        notifyDataSetChanged();
    }
}
package com.example.routineclock\u alarmclockhabitbuilder;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ImageView;
导入android.widget.TextView;
导入android.widget.ToggleButton;
导入androidx.annotation.NonNull;
导入androidx.recyclerview.widget.Recy
package com.example.routineclock_alarmclockhabitbuilder;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.RecyclerView;

import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TimePicker;

import com.google.android.material.floatingactionbutton.FloatingActionButton;

import java.util.Calendar;

public class CreateAlarmObject extends AppCompatActivity {

    FloatingActionButton backButton;
    Button addButton;
    EditText name, time;
    Item newItem = new Item(R.drawable.ic_clock, "Line 1", "Line 2", false, 0, 0);
    int currentHour, currentMinute;
    TimePicker alarmTimePicker;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_create_alarm_object);
        alarmTimePicker = findViewById(R.id.timePicker);

        backButton = findViewById(R.id.returnIcon);
        addButton = findViewById(R.id.addButton);
        name = findViewById(R.id.activityName);
        time = findViewById(R.id.activityTime);

        backButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(getApplicationContext(), MainActivity.class);
                newItem.setText1("Object name");
                newItem.setText2(String.valueOf(newItem.numActivities()) + " activities");
                currentHour = alarmTimePicker.getCurrentHour();
                currentMinute = alarmTimePicker.getChildCount();
                newItem.setCurrentHour(currentHour);
                newItem.setCurrentMinute(currentMinute);
                i.putExtra("addedObject", newItem);
                Log.d("ItemPassed", String.valueOf(newItem.getCurrentHour()) + ", " + String.valueOf(newItem.getCurrentMinute()));

                startActivity(i);
            }
        });

        addButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                newItem.addActivity(Integer.parseInt(time.getText().toString()), name.getText().toString());

                for(int i = 0; i < newItem.numActivities(); i++) {
                    Log.d("Item added", (i + 1) + ": " + newItem.getName(i) + ", " + newItem.getTime(i));
                }

            }
        });
    }
}
package com.example.routineclock_alarmclockhabitbuilder;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.os.Parcel;
import android.os.Parcelable;
import android.view.View;
import android.widget.TimePicker;
import android.widget.Toast;
import android.widget.ToggleButton;

import java.util.ArrayList;
import java.util.Calendar;

import static android.content.Context.ALARM_SERVICE;

public class Item implements Parcelable {

    private int mImageResource;
    private String mText1, mText2;
    private ArrayList<Activities> myActivities = new ArrayList<Activities>();
    private boolean toggleOn;
    private int currentHour, currentMinute;


    public Item(int imageResource, String text1, String text2, boolean toggle, int newHour, int newMinute) {
        mImageResource = imageResource;
        mText1 = text1;
        mText2 = text2;
        toggleOn = toggle;
        currentHour = newHour;
        currentMinute = newMinute;

    }

    protected Item(Parcel in) {
        mImageResource = in.readInt();
        mText1 = in.readString();
        mText2 = in.readString();
    }

    public static final Creator<Item> CREATOR = new Creator<Item>() {
        @Override
        public Item createFromParcel(Parcel in) {
            return new Item(in);
        }

        @Override
        public Item[] newArray(int size) {
            return new Item[size];
        }
    };

    public int getImageResource () {
        return mImageResource;
    }

    public String getText1 () {
        return mText1;
    }

    public String getText2 () {
        return mText2;
    }

    public void setText1 (String newString) {
        mText1 = newString;
    }

    public void setText2 (String newString) {
        mText2 = newString;
    }

    public void addActivity (int time, String name) {
        Activities newActivity = new Activities(time, name);
        myActivities.add(newActivity);
    }

    public int numActivities () {
        return myActivities.size();
    }

    public int getTime (int i) {
        return myActivities.get(i).getTime();
    }

    public String getName (int i) {
        return myActivities.get(i).getName();
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(mImageResource);
        dest.writeString(mText1);
        dest.writeString(mText2);
    }

    public boolean getToggleOn(){ return toggleOn; }

    public void setToggleOn(boolean toggleOn) { this.toggleOn = toggleOn; }

    public int getCurrentHour () {
        return currentHour;
    }

    public int getCurrentMinute () {
        return currentMinute;
    }

    void setCurrentHour (int newHour) {
        currentHour = newHour;
    }

    void setCurrentMinute (int newMinute) {
        currentMinute = newMinute;
    }
}
    mToggleButton = itemView.findViewById(R.id.toggleButton);
    mToggleButton.setOnCheckedChangeListener(
    new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
        {
          currentItem.setToggleOn(isChecked);
            
        }
      }
    });
       if (currentItem.getToggleOn())
          holder.mToggleButton.setChecked(true);
        
       else
           holder.mToggleButton.setChecked(false);
        }