2015-11-19 70 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