Android - 为TextView设置setOnClickListener

17

这应该很简单,但我不确定问题出在哪里。 我试图使用以下代码捕获对 TextView 的点击:

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) {

        }
    });
}

这个 TextView 的 XML 是:

<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"/>

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

谢谢。


2
尝试移除android:onClick="onClick"。 - Volodymyr Yatsykiv
8个回答

41
您可以删除这个:

android:onClick="onClick"

或者,删除这个:

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

     }
});

并且有这个:

public void onClick(View v)
{
    // do something
}  

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

此外,您还有以下内容:

<TextView
     android:id="@+id/model" // id is model

按照以下方式初始化您的TextView:

TextView modelTextview = (TextView)addView.findViewById(R.id.model);

5

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

public void onClick(View v)

这不是你的本意,因为你已经在代码中设置了OnClickListener,而且没有在活动中创建专用的方法。 因此,你有两个选择:要么只需从xml文件中删除android:onClick="onClick",要么删除你创建的on click监听器并将其更改为onClick方法(最好将其名称更改为比onClick更好的名称……)

3
 super.onCreate(savedInstanceState);
 setContentView(R.layout.other_activity);
 findViewById(R.id.TextView).setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {

    }
});

请解释一下解决方案。 - Lithilion
这是一种在没有TextView变量的情况下实现OnClick监听器的方法。 - Ravikiran D

1

更改:

 TextView modelTextview = (TextView)addView.findViewById(R.id.modelEdit);

to

 TextView modelTextview = (TextView)addView.findViewById(R.id.model);

如果您想使用Java代码完成此操作,则无需在xml代码中使用android:onClick="onClick"

1
如果您将代码改为具有此结构,它将起作用:
public void runNextTask(){
   ...
}

public void onClick(View v) {

}

如果在xml中使用android:onClick="onClick"来捕获TextView的点击事件,那么你就不需要在Java代码中添加一个onClick监听器。


0
对于每个视图组件,我们都可以像 TextView 一样调用 setOnClickListener()。
textview.setOnclickListener(new setOnclickListener
                           {
                                public void onclick()
                                                   {


                                                    }
                           }
                            );``

0

这是由于您的布局文件中存在 onClick 属性。请从您的布局文件中删除以下行:

android:onClick="onClick"

更新后的 TextView 将会像这样:

<TextView
    android:id="@+id/model"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/Tracker_model" 
    android:clickable="true" />

0

你也可以试试这个..

 modelTextview.setOnClickListener(v -> {
                   // do something good...
                });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接