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> 

Bind->

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

我試過了android:clickable =「true」,它不起作用。 – Punllo

回答

0

嘗試在你的onBindViewHoldersetText後置onClickListener

請參閱此。

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

編輯1:

在你FotoViewHolder前settaImmagine功能overRide這一點。

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

不起作用.... – Punllo

+0

@Punllo檢查我的答案,根據您的代碼我已添加只是將'onClickListener'移動到'setText'下面。我檢查了我的身邊,並且日誌顯示爲給定。 –

+0

@Punllo我檢查了我的身邊和'日誌'顯示如預期。 –

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

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"。添加android:clickable="true"您需要TextView 並在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"); 
    } 
}); 

}