I wish to set onClickListeners for buttons in a spinner which is furthur inside a recyclerView. The following is what I have built(using spinner in my case):-
(https://i.stack.imgur.com/DmyJl.jpg)
Each of the items in my recyclerView has its own spinner which contains two options for every item: Update details and Delete. How and in which class can I set onClickListeners for these buttons so that I may be able to retrieve that which button(Update details or delete) is clicked on which item of recyclerView, so that I may be able to update/delete that particular password in my database. My code:-
PasswordsActivity.java:-
public class PasswordsActivity extends AppCompatActivity {
RecyclerView recyclerView;
FloatingActionButton FAB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_passwords);
recyclerView = (RecyclerView) findViewById(R.id.password_list);
FAB = (FloatingActionButton) findViewById(R.id.buttonAdd);
getSupportActionBar().setTitle("Saved Passwords");
DBHelper helper = new DBHelper(this);
ArrayList<PasswordModel> passwordModelArrayList = new ArrayList<>();
passwordModelArrayList.clear();
passwordModelArrayList = helper.readPasswords();
PasswordAdapter passwordAdapter = new PasswordAdapter(this, passwordModelArrayList );
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(passwordAdapter);
FAB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(PasswordsActivity.this, AddPasswords.class);
startActivity(intent);
}
});
}
@Override
protected void onResume() {
super.onResume();
DBHelper helper = new DBHelper(this);
ArrayList<PasswordModel> passwordModelArrayList = new ArrayList<>();
passwordModelArrayList.clear();
passwordModelArrayList = helper.readPasswords();
PasswordAdapter passwordAdapter = new PasswordAdapter(this, passwordModelArrayList );
recyclerView.setAdapter(passwordAdapter);
}
PasswordAdapter.java:-
public class PasswordAdapter extends
RecyclerView.Adapter<PasswordAdapter.MyViewHolder>{
Context context;
ArrayList<PasswordModel> arrayList;
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.passwords_list, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
TextView username;
TextView password;
TextView website;
username = holder.usernameView;
password = holder.passwordView;
website = holder.websiteView;
username.setText(arrayList.get(position).getSavedUsername());
password.setText(arrayList.get(position).getSavedPassword());
website.setText(arrayList.get(position).getSavedWebsite());
}
@Override
public int getItemCount() {
return arrayList.size();
}
@Override
public long getItemId(int position) {
return position;
}
class MyViewHolder extends RecyclerView.ViewHolder
{
TextView usernameView;
TextView websiteView;
TextView passwordView;
public MyViewHolder(final View itemView)
{
super(itemView);
this.passwordView = (TextView)itemView.findViewById(R.id.textPassword);
this.usernameView = (TextView)itemView.findViewById(R.id.textUsername);
this.websiteView = (TextView)itemView.findViewById(R.id.textWebsite);
Spinner spinner = (Spinner)itemView.findViewById(R.id.spinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(context.getApplicationContext(), R.array.options_array, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
}
}
public PasswordAdapter(Context context, ArrayList<PasswordModel> arrayList)
{
this.context = context;
this.arrayList = arrayList;
}
}
Please let me know if anything else is needed as well.