【问题标题】:setOnClickListener on a TextView inside a Cardview在 Cardview 内的 TextView 上的 setOnClickListener
【发布时间】:2016-05-16 10:23:35
【问题描述】:

我在 Cardview 内的 TextView 上实现 setOnClickListener 时遇到了一些麻烦。我使用此 Cardview 来填充 recicleview。 我已经尝试在 onBindViewHolder 中设置监听器,但我看不到日志。

单项

<?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);

}

}

谢谢!

【问题讨论】:

  • 你在 recyclerview 上执行项目点击监听吗?
  • TextView 默认是不可点击的,所以添加android:clickable="true"使其可点击
  • 我试过 android:clickable="true",还是不行。
  • 你能发布你的适配器类吗?
  • 已编辑。谢谢。

标签: android textview onclicklistener android-recyclerview android-cardview


【解决方案1】:

尝试在您的onBindViewHolder 上设置setText 之后的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 overRide 这个settaImmagine 函数之前。

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

【讨论】:

  • @Punllo 根据您添加的代码检查我的答案,只需将您的onClickListener 移动到setText 下方即可。我检查了我的身边,日志显示为给定的。
  • @Punllo 我已经检查过了,Log 正在按预期显示。
  • 感谢您的建议。在主帖中已经按照您的建议,并且代码不起作用...我错过了什么?
  • 我已经添加了代码,但不幸的是日志没有显示出来。
  • @Punllo 试试你的运气,我现在无法假设。我首先检查了所有技巧并应用了我的一面,它工作正常。
【解决方案2】:

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

【讨论】:

  • 感谢您的回复,已失效,请查看编辑
  • @Punllo 你的 texview 是否充满了文本?
  • 是的,我用 setText() 设置了文本
  • @Punllo 如果文本为空,则 textview 的宽度将为,您将无法单击它。因此,请确保您在 textview 中有非空文本。
【解决方案3】:

在你的内部 class FotoViewHolder

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

如果你想识别不同的nomUser,你可以使用这个代码获取适配器的位置

int pos = getAdapterPosition();

【讨论】:

  • 你能看到你的recyclerview数据吗? @Punllo
  • 您是否在您的public FotoViewHolder(View convertView) 方法中添加此代码?如果这不起作用,请尝试给一个 Toast 并查看在单击 onClick 内的 Textview Toast.makeText(v.getContext(), "CLICKED", Toast.LENGTH_SHORT).show(); Toast 时是否有任何 Toast。
【解决方案4】:

这是您布局中的 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");
        }
    });

【讨论】:

    【解决方案5】:

    首先在单项布局的父项(意味着单项的父项线性布局)中添加以下属性,

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

    【讨论】:

      猜你喜欢
      • 2018-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-23
      • 1970-01-01
      • 1970-01-01
      • 2015-10-30
      相关资源
      最近更新 更多