2016-12-26 3 views
0

Mein Titel konnte wegen einer Zeichenbeschränkung nicht sehr aussagekräftig sein. Mein Ziel ist, dass, wenn ich auf ein Element INNERHALB der recyclerView klicke, es die RecyclerView Position ausdruckt (im Grunde Index).RecyclerView onClick() funktioniert nicht, sondern antwortet nur, wenn ich auf ein einzelnes Element klicke

Verwenden OnClick() mit XML und regulären Methoden nur crash meine App.

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

    private List<torrent> seznamTorrentov; 

    public class MyViewHolder extends RecyclerView.ViewHolder { 
     public TextView upSpeed, downSpeed, progress, name; 
     public ImageView delete, stanje; 

     public MyViewHolder(View view) { 
      super(view); 
      name = (TextView) view.findViewById(R.id.name); 
      upSpeed = (TextView) view.findViewById(R.id.upSpeed); 
      downSpeed = (TextView) view.findViewById(R.id.downSpeed); 
      progress = (TextView) view.findViewById(R.id.progress); 
      delete = (ImageView) view.findViewById(R.id.zbrisi); 
      stanje = (ImageView) view.findViewById(R.id.stanje); 
     } 
    } 


    public torrentAdapter(List<torrent> seznamTorrentov) { 
     this.seznamTorrentov = seznamTorrentov; 
    } 

    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.torrenti_vrsta, parent, false); 

     return new MyViewHolder(itemView); 

    } 

    @Override 

    public void onBindViewHolder(MyViewHolder holder, final int position) { 
     torrent torrent = seznamTorrentov.get(position); 
     holder.name.setText(torrent.getName()); 
     holder.delete.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       System.out.println("POZICIJA " + position); 
      } 
     }); 
     holder.progress.setText(String.valueOf(torrent.getProgress() + "%")); 
     //TUKAJ ZAOKROŽUJEMO VREDNOSTI 
     //TRENUTNO NI PODPORE ZA GIGABITNE PRENOSE 
     //S SPREMENLJIVKAMA sizeUname in Dname spreminjamo, ali napišemo na koncu hitrosti downloada MB/S ali KB/s 
     int sizeD = 1024; 
     int sizeU = 1024; 
     String sizeUname = "KB/s"; 
     String sizeDname = "KB/s"; 
     if (torrent.getDownSpeed() > 1000000) { 
      sizeD = 1024 * 1024; 
      sizeDname = "MB/s"; 
     } 
     if (torrent.getUpSpeed() > 1000000) { 
      sizeU = 1024 * 1024; 
      sizeUname = "MB/s"; 
     } 

     holder.downSpeed.setText(String.valueOf(Math.round(torrent.getDownSpeed())/sizeD) + sizeDname); 
     holder.upSpeed.setText(String.valueOf(Math.round(torrent.getUpSpeed())/sizeU) + sizeUname); 
     //TODO: ZRIHTAJ,DA SE POJAVIJO SLIKE IN PROGRESS BAR 
     if (torrent.getDownSpeed() == 0 && torrent.getUpSpeed() == 0) { 
      holder.stanje.setImageResource(R.drawable.check); 

     } 
     if (torrent.getStanje().contains("Stopped") || torrent.getStanje().contains("Paused")) { 
      holder.stanje.setImageResource((R.drawable.stop)); 
     } 
     if (torrent.getStanje().contains("Downloading")) { 
      holder.stanje.setImageResource(R.drawable.down); 


     } 
     if (torrent.getStanje().contains("Seeding")) { 
      holder.stanje.setImageResource(R.drawable.up); 
     } 

     holder.delete.setImageResource(R.drawable.delete); 
    } 

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

Dies ist meine RecyclerViewAdapter. Löschen ist das drawable Ich möchte gerne hören. Mit meiner aktuellen Implementierung bekomme ich Antworten, egal wo ich auf die RecyclerView klicke. Dies ist ein Problem, weil ich zwei verschiedene "Knöpfe" haben soll, die ihre eigenen Funktionen haben, wenn sie geklickt werden.

Wenn es relevant ist, ist dies der Fehler, den ich bekomme, wenn ich OnClick mit XML verwenden:

java.lang.IllegalStateException: Es kann kein Verfahren deleteTorrent (View) in einem Elternteil oder einen Vorfahren Kontext für Android finden: onClick-Attribut definiert auf Ansichtsklasse android.support.v7.widget.AppCompatImageView mit id 'zbrisi'

+0

Kannst du mehr Details hinzufügen, was genau willst du ?, –

Antwort

0

ich denke, dass Sie eine Eigenschaft erwähnt haben in Ihrem Adapter Layout xML-Tag mit dieser ID zbrisi wie diese

android:onclick="deleteTorrent" 

entfernen diese, wie es mit Ihnen aktuelle onClickListener Methode stören

+0

Ich löschte es in der XML. Ist der Code ansonsten korrekt? – Nephilim

+0

Wow. Ich kann nicht glauben, dass das passiert ist. Ich habe den onClick nicht in XML gelöscht, obwohl ich dreimal gecheckt habe. Mein Fehler. – Nephilim

0

wenn onclick in der XML definiert wird dann hat es in der Java-
dh umgesetzt werden.

android:onclick="delete" 

Java muss

public void delete(){//codes here} 

aber ich empfehle, dies nicht zu tun, da es eine bessere Art und Weise ist die onClickListener auf der Ansicht, selbst

+0

Ich habe das gemacht, sobald ich das onClick im Code implementieren wollte, ohne zu verwenden. Ich habe gerade den Fehler hinzugefügt, nur für den Fall, dass es mit meinem Problem geholfen hat. – Nephilim

0

zu implementieren ist, wenn ich Sie richtig verstanden habe, Code oben gibt dir die falsche Position zurück? Wie ist die Position? 0? 1? Oder jedes Mal, dass das anders ist? Versuchen Sie, "public void onBindViewHolder (MyViewHolder-Inhaber, letzte int-Position)" in "public void onBindViewHolder (MyViewHolder-Inhaber, int-Position)" zu ändern.

+0

Nein, es gibt die korrekte Position zurück. Aber das Problem ist, dass es die richtige Position zurückgibt, egal wo auf einem RecyclerView ich klicke. – Nephilim

Verwandte Themen