2015-01-10 60 views
0

假設我有一個擴展TextView的MyTextView類。 myTextView對象應該是可點擊的。android在哪裏把OnClickListener OOP明智?

一方面,OnClickListener似乎應該在MyTextView類中,因爲我將使用其中的一些,並且我不想爲每個人設置一個OnClickListener。如果OnClickListener位於MyTextView類中,它將只寫入一次。而且,所有myTextView對象在單擊時執行相同的操作。

另一方面,這些對象需要更新它們所在活動中的UI和一些變量。我無法從MyTextView類中訪問這些變量和UI對象,並且它感覺不對通過構造函數向所有人發送參考。

什麼是正確的做OOP明智的?

+0

嘗試實現OnClickListener在MyTextView。然後你會得到一個onClick回調。在那個方法上,你可以爲MyTextView類做你的東西,然後你可以把這個回調給外部的監聽器。 – Krish

回答

1

你可以這樣做

class MyTextView extends TextView implements View.OnClickListener{ 

    public MyTextView(Context context) { 
     super(context); 
     this.setOnClickListener(this); 
    } 

    public static interface MyTextListener{ 
     public void updateUI(); 
    } 

    @Override 
    public void onClick(View v) { 
     if(getContext() instanceof MyTextListener){ 
      ((MyTextListener)getContext()).updateUI(); 
     } 
    } 
} 

繼續實現該接口在活動

public class MainActivity extends Activity implements MyXextView.MyTextListener { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main);  
    } 

    @Override 
    public void updateUI() { 
     //update here 
    } 

}