2016-09-10 5 views
-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(); 
} 
} 

답변

0

제거 itemListener.rvOnClick(v, getLayoutPosition());

실제로 이것을 두 번 호출합니다. 이 방법을 변경하십시오.

@Override 
    public void onClick(View v) { 
     if(itemListener != null) { 
      itemListener.rvOnClick(v, getAdapterPosition()); 
     } 
    } 
관련 문제