Android - 用于TextView的setOnClickListener

bat*_*man 13 android onclicklistener

它应该是直截了当的,但我不确定哪里出了问题.我试着抓住TextViewwith 上的点击:

public void runNextTask(){
    final View addView = getLayoutInflater().inflate(R.layout.addnewtracker, null);
    final TrackerInfo newInfo = new TrackerInfo();
    //set up for model selection
    TextView modelTextview = (TextView)addView.findViewById(R.id.modelEdit)

    modelTextview.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });
}
Run Code Online (Sandbox Code Playgroud)

你的XML TextView是:

<TextView
    android:id="@+id/model"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/Tracker_model" 
    android:clickable="true"
    android:onClick="onClick"/>
Run Code Online (Sandbox Code Playgroud)

但是当我点击TextView它时,它不会进入onClick()方法.我错过了什么?

谢谢

Rag*_*dan 34

你可以删除这个:

android:onClick="onClick"
Run Code Online (Sandbox Code Playgroud)

或者,删除此:

modelTextview.setOnClickListener(new OnClickListener() {
    @Override
     public void onClick(View v) {

     }
});
Run Code Online (Sandbox Code Playgroud)

有这个:

public void onClick(View v)
{
    // do something
}  
Run Code Online (Sandbox Code Playgroud)

android:onClick="onClick"/> //重命名方法以避免混淆会更好

另外,你有这个:

<TextView
     android:id="@+id/model" // id is model
Run Code Online (Sandbox Code Playgroud)

所以初始化你的TextView如下:

TextView modelTextview = (TextView)addView.findViewById(R.id.model);
Run Code Online (Sandbox Code Playgroud)


Inc*_*App 5

这一行:android:onClick="onClick"告诉 Android 在 Activity 中查找具有此签名的方法:

public void onClick(View v)
Run Code Online (Sandbox Code Playgroud)

这不是您的意图,因为您已在代码中设置了 OnClickListener,并且尚未在活动中为其创建专用方法。因此,您的选择是要么简单地android:onClick="onClick"从 xml 文件中删除 ,要么删除您创建的 on click 侦听器并将其更改为 onClick 方法(最好将其名称更改为比 onClick 更好的名称...