2013-07-13 30 views
7

它应该很简单。但我不确定哪里出了问题。 我尝试在点击TextView的追赶与TextView上的setOnClickListener

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

       } 
      }); 
     } 

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

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

+1

尝试删除android:onClick =“onClick” –

回答

22

您可以删除这个

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

这条线:android:onClick="onClick"告诉Android在活动寻找与此签名的方法:

public void onClick(View v) 

这不是你的本意,因为你已经设置的OnClickListener代码和港口内在活动中为它创建了专门的方法。 所以你的选择是要么简单地从你的XML文件中删除android:onClick="onClick"或删除您所创建的上点击收听,并更改为一个onClick方法(和preferablly改变它的名字的东西比的onClick更好...

1

变化:

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

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

而且没有必要的android:onClick="onClick"在你的XML代码,如果你想使用Java代码

1

做到这一点。如果你改变你的代码有这样的结构,将工作:

public void runNextTask(){ 
    ... 
} 

public void onClick(View v) { 

} 

正如您在xml中告诉您在onClick模块中捕获文本视图(android:onClick="onClick")的点击一样,您无需在java代码中添加onClick侦听器。