-1
RecyclerView
에 대해 OnItemClickListener
과 같이 구현했습니다. 그것은 작동하고 나는 다시 ActivityView에서 행에 대한 텍스트를 얻을 수 있지만 문제는 내 MyActivity.class
에서 public void rvOnClick(View view, int position)
함수는 두번 호출됩니다옵니다. 나는 이유를 이해하지 못한다. 단지 각 행 select/click에서 한번만 호출되기를 바란다.RecyclerView의 onItemClick 인터페이스가 두 번 트리거 됨
MyActivity.class :
public class MyActivity extends AppCompatActivity
implements RecyclerViewClickListener {
@Override
public void rvOnClick(View view, int position) {
mLog.printToLog("Clicked User (from Activity) : " + selAppsList.get(position).getAppname());
}
}
RecyclerViewClickListener.class :
import android.view.View;
public interface RecyclerViewClickListener {
public void rvOnClick(View view, int position);
}
Adapters_SelectApps.class :
public class Adapters_SelectApps extends RecyclerView.Adapter<Adapters_SelectApps.MyViewHolder> {
private List<Model_SelectApps> selAppsList;
private MyAppLogger mLog = new MyAppLogger();
private Context context;
private RecyclerViewClickListener itemListener;
public class MyViewHolder extends RecyclerView.ViewHolder
implements View.OnClickListener {
public TextView tv_selappname;
public ImageView iv_selappicon;
public CheckBox cb_selappcheckbox;
private String mItem;
public MyViewHolder(View view) {
super(view);
tv_selappname = (TextView) view.findViewById(R.id.tv_selappname);
view.setOnClickListener(this);
}
public void setItem(String item) {
mItem = item;
tv_selappname.setText(item);
}
@Override
public void onClick(View v) {
itemListener.rvOnClick(v, getLayoutPosition());
if(itemListener != null) {
itemListener.rvOnClick(v, getAdapterPosition());
}
}
}
public Adapters_SelectApps(Context context,
List<Model_SelectApps> selAppsList) {
this.context = context;
this.selAppsList = selAppsList;
}
public void setClickListener(RecyclerViewClickListener rvItemClickListener) {
this.itemListener = rvItemClickListener;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.row_selappslist, parent, false);
return new Adapters_SelectApps.MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Model_SelectApps app = selAppsList.get(position);
holder.tv_selappname.setText(app.getAppname());
}
@Override
public int getItemCount() {
return selAppsList.size();
}
}