の内側に、私は私の活動でこの方法(CreatePhotostoryActivity
)持っている間活動からボタンがクリックされた場合にどのように検出します:私のRecyclerView
アダプタでRecyclerViewアダプタ
@Override
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);
Intent i = new Intent(CreatePhotostoryActivity.this, RVAdapter.class);
i.putExtra("isSaved", true);
startActivity(i);
}
});
cancelButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
closeEditMoment();
Intent i = new Intent(CreatePhotostoryActivity.this, RVAdapter.class);
i.putExtra("isSaved", false);
startActivity(i);
}
});
}
、showEditField
は、インタフェースを使用して呼び出され、 saveButton
またはcancelButton
のいずれかをクリックできなかったことを除いて動作します。これは、それが私のRecyclerView
アダプタ(RVAdapter
)のonBindViewHolder
方法で呼ばれています方法です:
((RecyclerView.ViewHolder) momentViewHolder).itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mAdapterCallback.showEditField(moments.get(position), position);
Intent intent = ((CreatePhotostoryActivity) mContext).getIntent();
Boolean isSaved = intent.getExtras().getBoolean("isSaved");
if (isSaved) {
holder.momentCaption.setText(moments.get(position).caption);
holder.momentPlaceholder.setVisibility(View.GONE);
holder.momentCaption.setVisibility(View.VISIBLE);
} else {
holder.momentPlaceholder.setVisibility(View.VISIBLE);
holder.momentCaption.setVisibility(View.GONE);
}
notifyDataSetChanged();
});
がクリックされたボタンを見つけるために意図を使用しての私の試みに注意してください。それは動作しません。 をクリックしてもがなくなり、momentPlaceHolder
が表示されたままになります。その後、アプリもクラッシュします。
編集:私は意思がアダプタから取得される前momentCaption
とmomentPlaceholder
の値を設定する前にこのmAdapterCallback.showEditField(moments.get(position), position);
を呼び出すとshowEditField
呼び出し、他の方法(例えばcloseEditMoment()
いるので、問題があると思います
は 'https://stackoverflow.com/questions/20132359/how-do-i-add-an-onclicklistener-to-a-button-inside-a-listview-adapter –