2016-10-03 4 views
2

Viewを拡張し、クラス内に表示されるSomeViewクラスがあり、これは線形レイアウトを拡張するコントロールです。onClickListenerがアクティビティに設定されました

線形レイアウトは、アクティビティのonCreateでインスタンス化されます。 このビューSomeViewをクリックするたびに、アクティビティのメソッドを呼びたいと思います。 私はこの

 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クラスは次のようになりますように活動にonClickListenerを設定しようとした

(それはちょうど楕円形を描画します)
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

あなたのコントロールのクラスコードを教えてください。 – xFighter

+0

アクティビティのコンテンツビューにコントロールを追加したことはありませんか? –

+0

@AbdulAhad質問に追加しました。 – JennyToy

答えて

1

あなたがSuperメソッドを呼び出すのを忘れてしまった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"); 
} 

ここから作業していますが、下の画像も見てください。

+0

興味深い。私はスーパーコール(コードに追加するのを忘れてしまった)を持っていますが、依然として仕事はありません。私はどこかにバグがあるはずです。 – JennyToy

+0

あなたは緑の楕円に触れるとコンソールで "こんにちは"を印刷したいですか? – xFighter

+0

メソッドが呼び出されている場合は、テストと同じです。 – JennyToy

関連する問題