2016-09-10 3 views
-1

Ich habe wie ein OnItemClickListener für RecyclerView implementiert. Es funktioniert und ich bekomme den Text für die Zeile in der Recyclerview zurück in der Aktivität, aber das Problem ist, dass die Funktion public void rvOnClick(View view, int position) in meinem MyActivity.class ruft zweimal. Ich verstehe nicht warum, ich will nur, dass es einmal in jeder Zeile aufgerufen/ausgewählt wird.Schnittstelle für onItemClick von RecyclerView zweimal ausgelöst

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(); 
} 
} 

Antwort

0

entfernen itemListener.rvOnClick(v, getLayoutPosition());

tatsächlich rufen Sie es zweimal. Ändere deine Methode dazu.

@Override 
    public void onClick(View v) { 
     if(itemListener != null) { 
      itemListener.rvOnClick(v, getAdapterPosition()); 
     } 
    } 
Verwandte Themen