为自定义视图设置onClickListener

时间:2013-03-23 12:04:05

标签: android

我创建了一个名为Cell的自定义视图,它绘制了一个正方形。在我的活动中,我创建了一个2d单元格数组,因此给出了一个网格结构。现在的原因是,我希望单个单元格根据他们拥有的某些值来响应我的点击。比如说,每个单元格都有一个布尔值,并且基于true的假,我将为单元格着色。我尝试首先使用一个单元格。但奇怪的是,即使我在单元格外单击,也会触发click事件。 更多信息:我在活动的onCreate方法中创建所有视图。 如果您需要更多信息,请与我们联系。

提前感谢您的帮助! 以为我会为其他参考编辑我的原始问题:)。

Activity  

onCreate() {
super.onCreate(savedInstanceState);
LinearLayout masterLayout = new LinearLayout(this);
LinearLayout.LayoutParams params;
params =  new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,     
LinearLayout.LayoutParams.MATCH_PARENT);
masterLayout.setLayoutParams(params);
addCells();
setContentView(masterLayout);
}

function addCells() {
for(int i =0; i<2;i++) {
Cell cell = new Cell(this,i);
LinearLayout.LayoutParams viewParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
cell.setLayoutParams(viewParams);
masterLayout.addView(cell);

cell.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
//Do Something here

}
});}}

Custom View :

Cell extends View {
boolean flag=false;
int cellNumber;
float xCoordinate=50;
float yCoordinate=50;

Cell(Context context, AttributeSet attrs) {
super(context, attrs);
}
Cell (Context context, int i) {
super(context);
cellNumber = i;
}

onDraw(Canvas c) {
paint.setColor(Color.RED);
paint.setStrokeWidth(3);
paint.setStyle(Paint.Style.STROKE);
xCoordinate = xCoordinate + 40*cellNumber;
c.drawRect(xCoordinate,yCoordinate,xCoordinate+40,yCoordinate+40, paint);

}}

这是我尝试的一个更简单的版本。现在奇怪的是,虽然我添加了两个不同的自定义视图实例,但onDraw()只被调用一次(在退出活动的onCreate()时)。根据我的阅读,为每个新的视图渲染调用onDraw()。请在这方面赐教我!

非常感谢!

2 个答案:

答案 0 :(得分:0)

我想你没有将onClickListener设置为正确的布局。它的一些方法是如何设置为您想要的元素的父级。请分享您的代码,以便我们了解确切的问题。

答案 1 :(得分:0)

  

即使我在单元格外单击,也会触发click事件。

可能你以某种方式将触摸事件转发到你的手机,至少它正在接收它们。在视图的onTouchEvent()方法中,决定是单击(并点击单击侦听器)还是长按或拖动等。

但是,如果这不能帮助您确定问题,请发布一些代码。