In meiner Haupttätigkeit (CreatePhotostoryActivity
) eine OnClickListener innerhalb einer Aktivität ändern, habe ich diese Methode:In einem RecyclerView Adapter, wie kann ich
public void showEditField(Moment oldMoment, final int index){
listRecycler.setVisibility(View.GONE);
editCaption.setVisibility(View.VISIBLE);
saveCancelNavbar.setVisibility(View.VISIBLE);
momentView.setVisibility(View.GONE);
photoStoryNavbar.setVisibility(View.GONE);
header.setVisibility(View.GONE);
Picasso.with(getApplicationContext()).load(oldMoment.photoUri).into(displayPhoto);
imageCaption.setText("");
imageCaption.setText(oldMoment.caption);
backIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
closeEditMoment();
}
});
saveText.setText("Save Moment");
saveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
updateMoment(imageCaption.getText().toString(), index);
}
});
cancelButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
closeEditMoment();
}
});
}
I showEditField
im onBindViewHolder
Methode meiner Adapter wie folgt aufrufen:
final RecyclerView.ViewHolder holder= (RecyclerView.ViewHolder)momentViewHolder;
((MomentViewHolder) momentViewHolder).momentCaption.setText(moments.get(i).caption);
Picasso.with(mContext).load(moments.get(i).photoUri).into(((MomentViewHolder) momentViewHolder).displayPhoto);
((RecyclerView.ViewHolder) momentViewHolder).itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mContext instanceof CreatePhotostoryActivity) {
((CreatePhotostoryActivity) mContext).showEditField(moments.get(position), position);
// this is what I want to implement
saveButton.setOnClickListener(new View.OnClickListener() {
holder.momentCaption.setText(moments.get(position).caption);
holder.momentPlaceholder.setVisibility(View.GONE);
holder.momentCaption.setVisibility(View.VISIBLE);
});
cancelButton.setOnClickListener(new View.OnClickListener() {
holder.momentPlaceholder.setVisibility(View.VISIBLE);
holder.momentCaption.setVisibility(View.GONE);
})
notifyDataSetChanged();
}
}
});
natürlich ist der saveButton
und cancelButton
onClickListeners innerhalb onBindViewHolder
funktioniert nicht, und das ist, was ich versuche zu tun. Ich möchte auch die Methoden beibehalten, die in den tatsächlichen onClickListeners in der Methode showEditField
aufgerufen werden. Im Grunde möchte ich und cancelButton
onClickListeners von dem Adapter "hinzufügen" unter Beibehaltung seiner ursprünglichen Funktionalität in der Aktivität.
Bearbeiten: saveButton
und cancelButton
sind nur in der Aktivität definiert, aber nicht im Adapter.
Wo gebe ich diese an? 'holder.momentCaption.setText (moments.get (Position) .Caption);' ' holder.momentPlaceholder.setVisibility (View.GONE);' ' holder.momentCaption.setVisibility (View.VISIBLE);' ' – Bargain23
saveButton 'und' cancelButton' sind nur in der Aktivität definiert – Bargain23
Sie können Bezug auf die Schaltflächen im Adapter mit 'Button saveButton = (Button) convertView.findViewById (R.id.saveButton);' –