2016-10-03 55 views
2

我有一个类SomeView,它扩展了View并且在一个类中显示扩展了线性布局的控件。onClickListener在Activity上设置

线性布局在创建活动时实例化。 我想在每次点击这个视图SomeView时在活动中调用一个方法。 我试图设置onClickListener在活动这样

 public class MainActivity extends AppCompatActivity implements 
    SomeView.OnClickListener { 

    private Controls menu; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     menu = new Controls(this); 
     menu.getSomeView().setOnClickListener(this); 

     setContentView(menu); 

    } 

    @Override 
    public void onClick(View view) { 
     System.out.println("Hello"); 
    } 
    } 

控件类看起来像这样

public class Controls extends LinearLayout { 

    private SomeView aview; 

    public Controls(Context context) { 
      super(context); 

      this.setOrientation(LinearLayout.HORIZONTAL); 

      aview = new SomeView(context); 

      this.addView(aview, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 
    } 

public SomeView getSomeView() { 
     return aview; 
    } 

} 

和SomeView类看起来是这样的(它只是绘制一个椭圆形)

public class SomeView extends View { 
public SomeView(Context context) { 

     super(context); 
    } 

@Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 

     RectF aRect = new RectF(); 
     aRect.left = getPaddingLeft(); 
     aRect.top = getPaddingTop(); 
     aRect.right = getWidth() - getPaddingRight(); 
     aRect.bottom = getHeight() - getPaddingBottom(); 

     Paint aPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 
     aPaint.setColor(Color.GREEN); 

     canvas.drawOval(aRect, aPaint); 

} 
} 

但我错过了一些东西,因为点击没有调用onClick方法。 我还需要设置什么?

+1

您能向我们展示您的Controls类代码吗? – xFighter

+0

您从未将控件添加到活动的内容视图? –

+0

@AbdulAhad我将它添加到问题中。 – JennyToy

回答

1

它看起来像你只在你的MainActivity类错误,你忘记调用超级方法。尝试这样做,希望它能起作用,因为它在我的手机中从此工作。

主要活动

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    menu = new Controls(this); 
    menu.getSomeView().setOnClickListener(this); 

    setContentView(menu); 

} 

而在你的回调方法,而不是使用的System.out.println(),使用Log.d()如下:

@Override 
public void onClick(View view) { 
    Log.d(TAG, "Hello"); 
} 

它从这里开始工作,看下面的图片。

enter image description here

+0

有趣。我有超级通话(忘记将其添加到代码中),但仍然无效。那么我肯定有一些bug。 – JennyToy

+0

你想在控制台上打印出“Hello”,并触摸绿色的椭圆形? – xFighter

+0

只是作为一个测试,如果方法被调用。 – JennyToy

相关问题