2016-11-07 3 views
0

Ich habe eine CustomersAdapter Klasse für meine RecyclerView und ich versuche Onclick-Ereignis auf der RecyclerView-Zeile zu implementieren. Aber leider funktioniert es nicht für mich.Recycler View Onclick Android funktioniert nicht

public class CustomersAdapter extends RecyclerView.Adapter<CustomersAdapter.MyViewHolder> { 

    private List<Customers> customerList; 
    Context ctx; 
    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.customers_layout, parent, false); 

     return new MyViewHolder(itemView); 

    } 

    @Override 
    public void onBindViewHolder(MyViewHolder holder, int position) { 

     Customers customer = customerList.get(position); 
     holder.customerName.setText(customer.getCustomerName()); 
    } 

    @Override 
    public int getItemCount() { 
     return customerList.size(); 

    } 

    public CustomersAdapter(List<Customers> customerList,Context ctx) { 
     this.customerList = customerList; 
     this.ctx = ctx; 
    } 



    public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
     public TextView customerName; 

     public MyViewHolder(View view) { 
      super(view); 
      customerName = (TextView) view.findViewById(R.id.cust_name); 

     } 

     @Override 
     public void onClick(View v) { 
      int position = getAdapterPosition(); // gets item position 
      if (position != RecyclerView.NO_POSITION) { 
       Customers customer= customerList.get(position); 
       Toast.makeText(ctx, customer.getCustomerName(), Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 
} 

XML: customers_layout

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="wrap_content" 
    android:clickable="true" 
    > 

    <android.support.v7.widget.CardView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_marginTop="10dp" 
      android:layout_marginBottom="10dp" 
      android:layout_marginLeft="5dp" 
      android:layout_marginRight="5dp" 
      > 

      <ImageView 
       android:layout_width="30dp" 
       android:layout_height="30dp" 
       android:id="@+id/cust_img" 
       android:src="@drawable/person" 
       /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:id="@+id/cust_name" 
       android:textColor="#000" 
       android:text="HELLO" 

       android:layout_marginLeft="13dp" 
       android:layout_marginStart="13dp" 
       android:layout_centerVertical="true" 
       android:layout_toRightOf="@+id/cust_img" 
       android:layout_toEndOf="@+id/cust_img" /> 
     </RelativeLayout> 


    </android.support.v7.widget.CardView> 

</RelativeLayout> 
+0

Gibt es einen Fehler oder Status? – mcemilg

+0

keine Anwendung läuft runnigig ich versuchte, die App zu debuggen, aber es ist nicht in die onclick-Methode –

Antwort

1

Versuchen Sie es stattdessen. Implementieren Sie onClick() im Konstruktor.

public MyViewHolder(View view) { 
    super(view); 
    customerName = (TextView) view.findViewById(R.id.cust_name); 
    view.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      int position = getAdapterPosition(); // gets item position 
      if (position != RecyclerView.NO_POSITION) { 
       Customers customer= customerList.get(position); 
       Toast.makeText(ctx, customer.getCustomerName(), Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }); 
} 
+0

Dank es funktionierte aber nicht wissen, warum es nicht funktioniert über Schnittstelle goona wählen Sie Ihre Anser nach wenigen Minuten –

+0

Wenn Sie die Schnittstelle verwenden, müssen Sie die onClickListener() innerhalb des Konstruktors auf das Ansichtsvariable festlegen. – vidulaJ

0

Sie vergessen setOnClickListener zu setzen .. hinzufügen setOnClickListener in onCreateViewHolder

private final OnClickListener mOnClickListener = new MyOnClickListener(); 
@Override 
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View itemView = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.customers_layout, parent, false); 
    itemView.setOnClickListener(mOnClickListener); 
    return new MyViewHolder(itemView); 

} 
+0

MyViewHolder implementieren onClickListener Schnittstelle –

+0

aber CustomersAdapter kein onClickListener – sasikumar

0

Sie für Sie Listenelement-Layout setOnTouchListener(); vergessen. Sie können den Touch-Listener für das Hauptlayout Ihres Listenelements festlegen.

0

Hörer auf halter.itemView gesetzt.

@Override 
public void onBindViewHolder(MyViewHolder holder, int position) { 

    Customers customer = customerList.get(position); 
    holder.customerName.setText(customer.getCustomerName()); 
    holder.itemView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

     } 
    }); 
} 

in onBindViewHolder-Methode.

0

Sie haben vergessen, onClickListener zu Ihrer Ansicht hinzuzufügen. Deshalb funktioniert Ihr onclick nicht. Hier müssen Sie Ihren Klick-Listener mit Ihren Ansichten hinzufügen.

public MyViewHolder(View view) { 
     super(view); 
     customerName = (TextView) view.findViewById(R.id.cust_name); 

     //bind the click listener with your view, like 
     customerName.setOnClickListerner(this); // now it will get called when you click this customerName view 
    } 
0

ViewHolder ist kein View die onClick() implementiert. In diesem Fall könnten Sie es wie folgt emulieren:

public MyViewHolder(View view) { 
    super(view); 
    customerName = (TextView) view.findViewById(R.id.cust_name); 
    //you forgot to call this 
    view.setOnClickListener(this); 
} 
Verwandte Themen