2012-01-12 4 views
4

Ok iveはEclipseでいくつかのアンドロイドをプログラミングし始めたばかりですが、これについて少し唖然としています。ここでは、ボタンプログラミングがこの本に書かれている2つの方法があります。どちらが良いの?これら2つのボタンの違いは何ですか? Androidプログラミング

View newButton = findViewById(R.id.main_new_button); 
newButton.setOnClickListener(this); 


Button newButton= (Button) this.findViewById(R.id.main_new_button); 
newButton.setOnClickListener(this); 

答えて

0

ボタンはTextViewを拡張するウィジェットです。 TextViewはビューを拡張します。 Buttonクラスを使用すると、上記のスーパークラスではなく、より具体的なメンバ関数にさらされます。これらの具体的なメソッドが何であるかについては、あなたはandroid.widget.Buttonクラスを参照してそれを探索する必要があります)。これを行うと、(ボタンを明示的に宣言するための)3つのコンストラクターが表示されます。他のメンバー関数はすべて同じです。

public Button(android.content.Context context); 
public Button(android.content.Context context, android.util.AttributeSet attrs); 
public Button(android.content.Context context, android.util.AttributeSet attrs, int defStyle); 

しかし、あなたは3ヶ月後に戻って、このコードに来たときにラインを自分でダウン混同したくない、または他の開発者があなたと側面に沿って作業した場合、第2の方法は、使用する適切な方法であり、 :

1

2つの形式は同等です。どちらの場合も、findViewByIdViewオブジェクトを返します。唯一の違いは、第2バージョンでは、ButtonのサブクラスであるViewに明示的にキャストされる点です。

あなたがdocumentationで見ることができるように、ViewTextViewのスーパークラスである、とTextViewButtonのスーパークラスです。

どちらが優れていますか?場合によります。 Buttonに固有の機能を使用する必要がある場合は、2番目の方法が優先されます。一方、Viewオブジェクトで十分なら、最初の方法を使用してください。

0

ボタンが必要な場合は、後者のフォームが必要です。 formmerの形成は大丈夫ですが、それは完璧な方法ではありません。ビューの用途はボタンだけではないからです。

0

2番目のケースでは、結果を正しいタイプにキャストしています。これにより、Button固有のメソッドにアクセスできます。最初のオブジェクトはButtonですが、Viewオブジェクトを返します。したがって、Button固有の機能にアクセスすることはできません。

+0

ました願っています。しかし、 'Button'は' TextView'から拡張されています。これは 'View'だけの機能がはるかに多いためです。 – curioustechizen

0

Viewによって作成されるボタンは、ビューであり、ボタンウィジェットではありません。ビュークラスからボタンを作成すると、ボタンクラスの関数を呼び出すことができませんでした。ビュークラスとボタンクラスはどちらも "setOnClickListener"関数を持っていますが、ビュークラスのその関数はボタンと同じではありません。

1

私はすべてのウィジェットがview.Iがstep--

1であなたを教えてくれますですthinking.Inアンドロイドのあなたの方法を好む)

まず重要なことは、すべてのボタンが表示されているが、必ずしもすべて見るべきボタン

View newButton = findViewById(R.id.main_new_button); 
    newButton.setOnClickListener(this); 

これは、newButtonが常にボタンであることを意味するものではありません。LinearLayout、newButton

へのImageButtonなど)しかし、後者の場合は

Button newButton= (Button) this.findViewById(R.id.main_new_button); 
newButton.setOnClickListener(this); 

newButtonはR.id.main_new_buttonは、XMLでのボタンのID

2)であればボタンでなければなら間違いなくある -

私は、すべてのボタンがViewであることを知っていると言いましたが、どのViewがボタンであるのかわかりません。それはfindViewByidをキャストすることです。そして、最初のケースはすべてのビューが独自のメソッドを持っているので、このビューを有効にしてください。ボタンを具体的に使用する必要があります。

は、私はちょうど `Button`は、独自の任意のパブリックメソッドが定義されていないことに気づいたあなたはそれ

+0

問題を解決するのに役立ちましたか?答えを受け入れるための質問を考慮する – Sameer

関連する問題