2016-12-26 7 views
0

文字制限のため、私のタイトルはあまり説明できませんでした。私の目標は、recyclerViewの中の要素をクリックすると、RecyclerViewの位置(基本的にインデックス)が表示されるということです。RecyclerView onClick()は機能しません。単一の要素をクリックしたときにのみ応答します。

OnClick()をXMLで使用し、通常のOnClickメソッドを使用すると、アプリがクラッシュするだけです。

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

これは私のRecyclerViewAdapterです。削除はdrawableです。OnClickを聞きたいです。現在の実装では、どこでRecyclerViewをクリックしても応答が得られます。これは問題です。なぜなら、私は、クリックされたときに独自の機能を持つ2つの異なる「ボタン」を持つことになっているからです。

それは、関連するなら、これは私がXMLでOnClickを使用するときに私が取得エラーです:

java.lang.IllegalStateException:アンドロイドの親や先祖のコンテキストでメソッドdeleteTorrent(ビュー)を見つけることができませんでした。 onClickの属性ID「zbrisi」

+0

正確に何をしたいのかという詳細を追加できますか? –

答えて

0

私はあなたがこの

のようにこのIDの zbrisiをアダプタレイアウトxmlタグでプロパティを言及していると思うとビュークラスandroid.support.v7.widget.AppCompatImageViewで定義されました
android:onclick="deleteTorrent" 

onclickが、それは、Java
IEで実装する必要があり、XMLで定義されている場合、それはあなたと一緒に現在のonClickListener方法

+0

XMLで削除しました。そうでない場合、コードは正しいですか? – Nephilim

+0

うわー。これが起こったとは信じられません。私は3回チェックしたにもかかわらずXMLのonClickを削除しなかった。私の悪い。 – Nephilim

0

を妨害するとしてこれを削除します。

android:onclick="delete" 

Javaは

public void delete(){//codes here} 

を持っている必要がありますが、私が正しくあなたを理解している場合、ビュー自体

+0

私はコードを使用しないでonClickを実装したいと思ったらすぐにそれをやりました。私はちょうどそれが私の問題を助けた場合のためにエラーを追加しました。 – Nephilim

0

onClickListenerを実装することで、より良い方法があるように私はこれをやってないことをお勧めします、コードあなたは間違った位置を返しますか?ポジションは何ですか? 0? 1?それとも毎回違うの? "public void onBindViewHolder(MyViewHolder holder、int int position)"を "public void onBindViewHolder(MyViewHolder holder、int position)"に変更してください。

+0

いいえ、正しい位置を返します。しかし、問題は、クリックした単一のRecyclerView上のどこにあっても正しい位置を返すことです。 – Nephilim

関連する問題