2014-01-20 42 views
2

我環顧四周,因此如何讓textview可點擊,我盡其所能,但onClick方法仍未被調用。下面是從活動我的代碼:可點擊的textview不工作

public void onClick(View v) { 
    switch(v.getId()) { 
    case R.id.month_january: 
     Log.w("onclick", "yes"); 
     TextView temp = (TextView) findViewById(v.getId()); 
     temp.setTextColor(Color.GRAY); 
     switchNumberDays(31); 
     break; 
    case R.id.month_february:... 

我把日誌,看看是否當我點擊了的TextView中的onClick被調用,並記錄什麼。這是我的特定文本視圖的XML:

<TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textSize="20dp" 
      android:layout_marginRight="20dp" 
      android:clickable="true" 
      android:id="@+id/month_january" 
      android:text="January" /> 

感謝您的任何幫助提前!之後,你

android:clickable="true" 

+0

您是否使用textview註冊了監聽器?像'textView.setOnClickListener(new onClickListener(){...})''。顯示將onClick分配給textview的代碼。 – csmckelvey

+0

@csmckelvey我以爲你也可以只有一個onClick方法,並切換ID的 – epsilondelta

+0

你可以,但聽衆必須註冊_something_。有很多方法可以實現這一點,這就是爲什麼我必須看到你是如何實現它的。我需要看到更多的代碼(而不是你的onClick代碼,外面的代碼)。 – csmckelvey

回答

1

因爲您的班級正在實施onClickListener界面,所以一定要在創建文本視圖後註冊它。

public class someActivity extends Activity implements View.OnClickListener { 
    public void onCreate(Bundle savedInstanceState) { 
     TextView textView = new TextView(); 
     textView.setOnClickListener(this); 
    } 
} 
1

喜請這樣做,因爲我認爲你的聽衆不是在你的代碼正確使用..

爲了使您的TextView點擊剛剛添加到您的TextView可以onClickListener使用此設置爲它:

yourTextView.setOnClickListener(new OnClickListener() { 

@Override 
     public void onClick(View v) { 
      // do your work here 
     } 
    }); 

或另一種方式也有

public class sticks extends Activity implements View.OnTouchListener { 
    private TextView tv1; 
    private TextView tv2; 
    private TextView tv3  

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    tv1 = (TextView) findViewById(R.id.tv1); 
    tv2 = (TextView) findViewById(R.id.tv2); 
    tv3 = (TextView) findViewById(R.id.tv3); 

    // bind listeners 
    tv1.setOnTouchListener(this); 
    tv2.setOnTouchListener(this); 
    tv3.setOnTouchListener(this); 

    } 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
    // check which textview it is and do what you need to do 

    // return true if you don't want it handled by any other touch/click events after this 
    return true; 
    } 
}