2016-10-03 86 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

相關問題