4

Cardview内のTextViewにsetOnClickListenerを実装する際に問題があります。このCardviewを使用して、Recicleviewを設定します。 onBindViewHolderでリスナーを設定しようとしましたが、ログが表示されません。CardView内のTextViewにsetOnClickListenerを設定する

単一アイテム

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

    <android.support.v7.widget.CardView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="5dp" 
     android:layout_marginRight="5dp" 
     android:layout_marginBottom="5dp" 
     android:layout_marginTop="5dp" 
     android:clickable="true"> 

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 

      <ImageView 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:id="@+id/fotoUser" 
       android:layout_gravity="center_horizontal" 
       android:adjustViewBounds="true" 
       android:background="#f9fbff" 
       android:layout_alignParentRight="true" 
       android:layout_alignParentLeft="true" 
       android:minHeight="300dp" /> 

      <LinearLayout 
       android:layout_centerHorizontal="true" 
       android:orientation="horizontal" 
       android:id="@+id/linear" 
       android:layout_width="fill_parent" 
       android:layout_height="40dp" 
       android:layout_below="@+id/fotoUser" 
       android:weightSum="1" 
       android:background="@color/colorPrimary" 
       android:gravity="center_horizontal"> 


       <ImageView 
        android:src="@drawable/ic_diaf" 
        android:layout_width="wrap_content" 
        android:layout_height="40dp" 
        android:id="@+id/imageView2" 
        android:layout_weight="0.03" 
        android:layout_gravity="center" /> 

       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:textAppearance="?android:attr/textAppearanceMedium" 
        android:text="1.0" 
        android:id="@+id/txtDiaf" 
        android:paddingTop="0dp" 
        android:paddingRight="5dp" 
        android:textColor="#ffffff" 
        android:layout_gravity="center" /> 

       <ImageView 
        android:src="@drawable/ic_tempi" 
        android:layout_width="wrap_content" 
        android:layout_height="40dp" 
        android:id="@+id/imageView3" 
        android:layout_weight="0.03" 
        android:layout_gravity="center" /> 

       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:textAppearance="?android:attr/textAppearanceMedium" 
        android:text="1sec" 
        android:id="@+id/txtTempo" 
        android:paddingTop="0dp" 
        android:paddingRight="5dp" 
        android:textColor="#ffffff" 
        android:layout_gravity="center" /> 

       <ImageView 
        android:src="@drawable/ic_iso" 
        android:layout_width="wrap_content" 
        android:layout_height="40dp" 
        android:id="@+id/imageView4" 
        android:layout_weight="0.03" 
        android:layout_gravity="center" /> 

       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:textAppearance="?android:attr/textAppearanceMedium" 
        android:text="100" 
        android:id="@+id/txtIso" 
        android:paddingTop="0dp" 
        android:paddingRight="5dp" 
        android:textColor="#ffffff" 
        android:layout_gravity="center" /> 
       <ImageView 
        android:src="@drawable/ic_fl" 
        android:layout_width="wrap_content" 
        android:layout_height="40dp" 
        android:id="@+id/imageView5" 
        android:layout_weight="0.03" 
        android:layout_gravity="center" /> 
       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:textAppearance="?android:attr/textAppearanceMedium" 
        android:text="100mm" 
        android:id="@+id/txtFl" 
        android:paddingTop="0dp" 
        android:textColor="#ffffff" 
        android:layout_gravity="center" /> 

      </LinearLayout> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="USERNAME" 
       android:id="@+id/userName" 
       android:clickable="true" 
       android:textStyle="bold|italic" 
       android:paddingTop="4dp" 
       android:paddingLeft="2dp" 
       android:layout_below="@+id/linear" 
       android:layout_alignParentLeft="true" 
       android:layout_alignParentStart="true" /> 

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:text="DESCRIZIONE" 
       android:id="@+id/descFoto" 
       android:paddingTop="4dp" 
       android:paddingLeft="2dp" 
       android:background="@color/colorPrimary" 
       android:paddingBottom="3dp" 
       android:layout_below="@+id/userName" 
       android:layout_alignParentLeft="true" 
       android:layout_alignParentStart="true" 
       android:textColor="@color/abc_primary_text_material_dark" /> 

      <ImageView 
       android:layout_width="40dp" 
       android:layout_height="wrap_content" 
       android:layout_marginRight="2dp" 
       android:src="@drawable/ic_like" 
       android:layout_toLeftOf="@+id/likes" 
       android:layout_alignTop="@+id/descFoto" 
       android:layout_alignBottom="@+id/descFoto" /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="NL" 
       android:id="@+id/likes" 
       android:paddingTop="4dp" 
       android:background="@color/colorPrimary" 
       android:paddingBottom="3dp" 
       android:layout_below="@+id/userName" 
       android:textColor="@color/abc_primary_text_material_dark" 
       android:layout_above="@+id/spazio" 
       android:layout_alignParentRight="true" 
       android:layout_alignParentEnd="true" /> 


      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="2dp" 
       android:id="@+id/spazio" 
       android:background="@color/colorPrimaryDark" 
       android:layout_below="@+id/descFoto" 
       android:layout_alignParentLeft="true" 
       /> 


      <ImageView 
       android:layout_width="50dp" 
       android:layout_height="70dp" 
       android:id="@+id/btnLIKE" 
       android:clickable="true" 
       android:src="@drawable/ic_nolike" 
       android:layout_gravity="bottom" 
       android:adjustViewBounds="true" 
       android:paddingBottom="3dp" 
       android:layout_weight="0.06" 
       android:layout_above="@+id/linear" 
       android:layout_alignParentLeft="true" 
       android:layout_alignParentStart="true" /> 
     </RelativeLayout> 
    </android.support.v7.widget.CardView> 
</LinearLayout> 

リスト - >

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="5dp" 
android:background="#fffffc"> 


<android.support.v7.widget.RecyclerView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/listaFoto" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:dividerHeight="0dp" 
    android:divider="#fff9fa" /></RelativeLayout> 

バインドに>

public void onBindViewHolder(final SeguitiFragment_FotoADP.FotoViewHolder holder,final int position) { 
    SeguitiFragment_Foto fotoS = foto.get(position); 

    //..... 
    holder.nomeUser.setText(fotoS.getUser()); 
    holder.nomeUser.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.e("Click","Effettuato"); 
     } 
    }); 
    //......... 

    } 

アダプタ - >

public class SeguitiFragment_FotoADP extends RecyclerView.Adapter<SeguitiFragment_FotoADP.FotoViewHolder>{ 

private List<SeguitiFragment_Foto> foto; 
private Context c; 
private String NomeFile; 

public SeguitiFragment_FotoADP(List<SeguitiFragment_Foto> foto,Context c) { 
    this.foto = foto; 
    this.c=c; 
} 


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

    return new FotoViewHolder(itemView); 
} 

@Override 
public void onBindViewHolder(final SeguitiFragment_FotoADP.FotoViewHolder holder,final int position) { 
    SeguitiFragment_Foto fotoS = foto.get(position); 


    if(fotoS.getDiaframma()==-1){ 
     holder.diaf.setText("--"); 
    }else{ 
     holder.diaf.setText(fotoS.getDiaframma()+""); 
    } 

    if(fotoS.getIso()==-1){ 
     holder.iso.setText("--"); 
    }else{ 
     holder.iso.setText(fotoS.getIso()+""); 
    } 

    holder.nomeUser.setText(fotoS.getUser()); 
    holder.nomeUser.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.e("Click","Effettuato"); 
     } 
    }); 
    holder.desc.setText(fotoS.getDescrizione()); 
    holder.tempo.setText(fotoS.getTempi()+ "sec"); 
    holder.fl.setText(fotoS.getMillimetri()+"mm"); 


    NomeFile=fotoS.getIdFoto(); 

    File file = new File (c.getFilesDir(), NomeFile+".jpg"); 
    if (!file.exists()) { 
     downloadFTP ftp = new downloadFTP(fotoS.getIdFoto(), holder); 
     ftp.execute(); 
    }else{ 
     settaImmagine(holder); 
    } 



} 

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


public static class FotoViewHolder extends RecyclerView.ViewHolder { 
    public ImageView immagine; 
    public TextView nomeUser; 
    public TextView desc; 
    public TextView diaf; 
    public TextView tempo; 
    public TextView iso; 
    public TextView fl; 
    public ImageView like; 

    public FotoViewHolder(View convertView) { 
     super(convertView); 

     nomeUser=(TextView)convertView.findViewById(R.id.userName); 
     desc=(TextView)convertView.findViewById(R.id.descFoto); 
     immagine=(ImageView)convertView.findViewById(R.id.fotoUser); 
     diaf=(TextView)convertView.findViewById(R.id.txtDiaf); 
     iso=(TextView)convertView.findViewById(R.id.txtIso); 
     fl=(TextView)convertView.findViewById(R.id.txtFl); 
     tempo=(TextView)convertView.findViewById(R.id.txtTempo); 
     like=(ImageView) convertView.findViewById(R.id.btnLIKE); 


    } 


public void settaImmagine(FotoViewHolder v){ 
    File file = new File(c.getFilesDir(), NomeFile + ".jpg"); 
    Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); 
    v.immagine.setImageBitmap(bitmap); 

} 

}

ありがとうございました!

+0

あなたはrecyclerview上の項目をクリックリスナーを実行していますか? –

+0

TextViewはデフォルトではクリックできないので、クリックすることができます。android:clickable = "true" ' –

+0

I've Tried android:clickable =" true "、それは動作しません。 – Punllo

答えて

0

はあなたonBindViewHoldersetTextonClickListenerを設定してください。

これを参照してください。これはあなたのコードの変更に応じ

holder.mTextView.setText(mValues.get(position)); 
holder.mTextView.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Log.e("Click", "Effettuato"); 
    } 
}); 

holder.nomeUser.setText(fotoS.getUser()); 
holder.nomeUser.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Log.e("Click","Effettuato"); 
    } 
}); 

EDIT 1:

あなたFotoViewHolder settaImmagine関数の前overRideこれで。

@Override 
public String toString() { 
    return super.toString() + " '" + nomeUser.getText(); 
} 
+0

動作しません.... – Punllo

+0

@Punlloあなたのコードごとに私の答えをチェックします。あなたの 'onClickListener'を' setText'の下に移動しました。私は私の側をチェックし、ログは与えられたように表示されます。 –

+0

@Punllo私はそれを私の側にチェックし、 'Log'が期待どおりに表示されています。 –

0

XMLアダプタで

<TextView 
     <-- other attributes --> 
     android:clickable="true" 
     /> 

で使用

nomeUser= (TextView)view.findViewById(R.id.**id**); 

し、最終的に

holder.nomeUser.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.e("Click","Effettuato"); 
     } 
    }); 
+0

あなたの返信ありがとう、それは動作しません、編集を参照してください – Punllo

+0

@Punlloあなたのtexviewはテキストで満たされていますか? –

+0

はい、setText()でテキストを設定します – Punllo

0

あなた class FotoViewHolder

インサイド210

nomUser.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.e("Click","Effettuato"); } });

違うnomUserを特定したい場合、あなたはこのコード

int pos = getAdapterPosition();

+0

試しても何も表示されません。 – Punllo

+0

あなたはrecyclerviewのデータを見ることができますか? @Punllo – Shahal

+0

はい、すべてが想定どおりに表示されます。 – Punllo

0

を使用して、アダプタの位置を取得することができます。これは、あなたのレイアウトで、あなたのTextViewです:

<TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="USERNAME" 
       android:id="@+id/userName" 
       android:textStyle="bold|italic" 
       android:paddingTop="4dp" 
       android:paddingLeft="2dp" 
       android:layout_below="@+id/linear" 
       android:layout_alignParentLeft="true" 
       android:layout_alignParentStart="true" /> 

android:clickable="true"がありません。あなたに必要なTextViewandroid:clickable="true"を追加し、追加onBindViewHolder中:

holder.nomeUser.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.e("Click","clicked"); 
     } 
    }); 
+0

メインのポストを修正しました。私はすでに試しました.... – Punllo

0

まず、単一アイテムのレイアウトのあなたの親(あなたsingleItemの手段親リニアレイアウト)にプロパティの下

アンドロイド追加:descendantFocusabilityをその後、= "blocksDescendants"

し、以下のようにしてみてください、

public void onBindViewHolder(final SeguitiFragment_FotoADP.FotoViewHolder holder,final int position) 
{ 
    SeguitiFragment_Foto fotoS = foto.get(position); 
    bind(position,fotoS); 
} 

今、あなたのFotoViewHolderクラスのメイク法では以下のように、

public void bind(int pos, SeguitiFragment_Foto fotoS) { 

nomeUser.setText(fotoS.getUser()); 
nomeUser.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Log.e("Click","Effettuato"); 
    } 
}); 

} 
関連する問題