2015-11-19 102 views
-1

我已經搜索,但無法找到我的問題的答案。我的自定義函數結構customView.onclick

這是我有:

private class BoxView extends View { 
    private String caption; 
    private OnClickListener bvClickListener = null 
    public BoxView(Context context) { 
    super(context); 
    this.bvClickListener = new this.OnClickListener(){ 
    public void onClick (View v){ 
    /*v.setCaption("X"); view don't have this method */ 
     }} 
    } 

    public void setCaption(String s){ 
this.caption=s; 
invalidate(); 
    } 
} 

這是我想擁有的一切:

private class BoxView extends View { 
    private String caption; 
    private OnClickListener bvClickListener = null 
    public BoxView(Context context) { 
    super(context); 
    this.bvClickListener = new this.OnClickListener(){ 
    public void onClick (BoxView bv){ 
    bv.setCaption("X"); 
     }} 
    } 

    public void setCaption(String s){ 
this.caption=s; 
invalidate(); 
    } 
} 

我需要爲我的自定義視圖自定義方法。我希望能夠在觸發onclick時傳遞我的自定義視圖,而不是視圖版本,以便我可以直接訪問它。

更新

我想有機會獲得真正的對象不是一個轉換一個。所以我想避免這種情況:

public void onClick (View v){ 
((BoxView)v).setCaption("X"); 
} 
+0

這是不可能的點擊,你擴展了view.You可以設置在類中監聽器單擊您使用該特定視圖的活動中的偵聽器。您可以使用點擊偵聽器來實現,而不是使用點擊偵聽器。 –

+0

@Rohit Heera?!你的意思是我們必須使用setOnclickListener來設置onClickListener,因爲我們不能在自定義視圖中使用OnClickListener?那麼我應該說我們可以。我的問題是如何在OnClick – ncm

回答

1

呼叫setCaption方法,在onClick

public void onClick (View v){ 
    ((BoxView)v).setCaption("X"); 
} 
+0

中將'View v'參數設置爲'BoxView bv'好男人感謝您的答案,但我想讓我的整個版本的customView不是轉換後的。就像我想訪問完整的自定義方法和屬性。 – ncm

+1

@imsiso:但是我們也可以用訪問所有的方法和屬性'((BoxView中的)V)' –

+0

好的謝謝你,但我依然在尋找一種方法,能夠訪問到原始類型。 +1 – ncm

0
Try this 

class Main extents Activity 
{ 
BoxView boxView; 
@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
// if view is used using layout then 
boxView = (BoxView)findViewByID(id); 

//else if directly used 

boxView = new BoxView(this); 

box.setOnClickListener(new onClickListener() 
{ 

@Override 
     public void onClick(View view) { 
     boxView.setCaption("X"); 
boxView.invalidate(); 
     } 
}); 
    } 

} 
+0

中將參數'View v'設置爲'BoxView bv'感謝您的關注。但我認爲你的解決方案沒有優化。就像我有佈局將創建一個grid.and我不能將它們保存在這樣的標識符。而且在我的方法中,我希望佈局和視圖包含其簡單的行爲和動畫以及事件,因此它就像一個小部件並準備好使用。在活動中,我只是創建該佈局的對象並給出參數,其餘的將在自定義佈局類中進行 – ncm