Android 名为inside RecyclerView';s onBindViewHolder
我试图让自定义对话框的OnClick删除并更新从RecyclerView中单击的项Android 名为inside RecyclerView';s onBindViewHolder,android,dialog,android-alertdialog,android-recyclerview,Android,Dialog,Android Alertdialog,Android Recyclerview,我试图让自定义对话框的OnClick删除并更新从RecyclerView中单击的项 final Dialog rightDialog = new Dialog(context1); ... TextView textOKRight = (TextView) rightDialog.findViewById(R.id.text_ok); textOKRight.setText("NEXT"); textOKRight.setOnClickListener(n
final Dialog rightDialog = new Dialog(context1);
...
TextView textOKRight = (TextView) rightDialog.findViewById(R.id.text_ok);
textOKRight.setText("NEXT");
textOKRight.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// MainAdapter.ViewHolder ccd = new MainAdapter.ViewHolder(itemView, listener);
// ccd.removeCaller();
rightDialog.dismiss();
}
});
rightDialog.show();
main适配器
public class MainAdapter extends RecyclerView.Adapter<MainAdapter.ViewHolder>{
..
private static ViewHolder.IndividualClickListener mListenerCallback;
private static ViewHolder.IndividualClickListener mListener;
private MainAdapter mMyAdapter;
public AnimatorSampleActivity animatorActivity;
public MainAdapter(Context context, ArrayList<Question> dataSet) {
mContext = context;
questions = dataSet;
...
}
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public IndividualClickListener mListener;
...
public ViewHolder(View itemView, IndividualClickListener listener) {
super(itemView);
mListener = listener;
image = (ImageView) itemView.findViewById(R.id.imageMic);
imageOne = (ImageView) itemView.findViewById(R.id.imageOne);
text = (TextView) itemView.findViewById(R.id.text);
itemView.setOnClickListener(this);
image.setOnClickListener(this);
}
//////THIS IS THE METHOD I WOULD LIKE TO CALL FROM THE DIALOG///////
public void removeCaller() {
mListener.remove1(getLayoutPosition());
Log.d(TAG, "Main Adapter Called remove1 from removeCaller()");
}
@Override
public void onClick(View v) {
if (v instanceof ImageView) {
} else {
}
}
public interface IndividualClickListener {
void onTomato(ImageView callerImage, int position);
void onPotato(View caller, int position);
void remove1(int position);
void onDialogClick(TextView textOKRight);
}
}
@Override
public int getItemCount() {
return questions.size();
}
@Override
public void onBindViewHolder(final MainAdapter.ViewHolder holder, final int position) {
Question currentQuestion = questions.get(position);
///I CREATED A DIALOG HERE, Dialog.Builder AND IM ABLE TO HAVE THE DIALOG DIMISS AND REMOVE THE ITEM, BUT I CANT FIGURE OUT HOW TO DO IT FROM MY CUSTOM DIALOG OUTSIDE MainAdapter////
Picasso.with(mContext).load(currentQuestion.drawableId).into(holder.getImageView());
Picasso.with(mContext).load(currentQuestion.iconId).into(holder.getImageView1());
holder.getImageView().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v instanceof ImageView) {
//holder.removeCaller();
//mAdapterCallback.remove1(position);
mListenerCallback.onTomato((ImageView) v, position);
Log.d(TAG, "Main Adapter Called remove from OnBindViewHolder"+""+position);
}else{
mListenerCallback.onPotato((ImageView) v, position);
}
}
});
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.layout_list_item, parent, false);
final MainAdapter.ViewHolder vh = new ViewHolder(v, new MainAdapter.ViewHolder.IndividualClickListener(){
@Override
public void onTomato(ImageView callerImage, int position) {
Log.d(TAG, "Main Adapter Called OnTomato OnCreateVIewHolder");
}
@Override
public void onPotato(View caller, int position) {
}
@Override
public void remove1(int position) {
questions.remove(position);
notifyItemRemoved(position);
Log.d(TAG, "Main Adapter Called remove1 from OnCreaterViewHolder" + position);
}
@Override
public void onDialogClick(TextView textOKRight) {
}
});
return vh;
}
public interface callerCallBack{
.....
}
}
错误
第82行是
mdialogCallerCallBack.onDialogClick(((TextView)textOKRight));
如果您的问题是使用getFragmentManaget实现,请执行以下操作: 创造 在片段中,将其传递给您的
回收视图
,然后再次传递给您的视图持有者
注意:pass表示将其作为参数发送给构造函数将适配器外部的onclick委托给您的活动或片段,并将对话框视为另一个片段。不要在其他视图中处理它们的生命周期。它们已经过于复杂了。谢谢你的回复。通过“将适配器视为另一个片段”,您的意思是我应该在适配器内部膨胀自定义对话框,但在适配器外部处理单击?更新的问题,看看我是否理解你的意思,错误和日志..再次感谢>将对话框视为另一个片段->意思是在活动级别处理它,而不是在适配器内部。如果你有,就按照谷歌的例子。哦,好的,谢谢你的澄清。@MLCIM程序员让它工作了。您对“视图生命周期处理”、“过于复杂”和“将对话框视为一个片段”的评论,确实帮助我对我的实现和问题采取了新的方法和观点。再次感谢。
Process: jp.wasabeef.example.recyclerview, PID: 28523
java.lang.NullPointerException at jp.wasabeef.example.recyclerview.NewCustomDialog$1.onClick(NewCustomDialog.java:82)
mdialogCallerCallBack.onDialogClick(((TextView)textOKRight));
FragmentManager fm = getFragmentManager();