2016-10-18 3 views
-3

私はXMLでImageViewsを使用していて、TextViewsをボタンとして使用するコードを書いています。 JavaコードでsetOnClickListeners以外のものを行う必要はありません。そのため、ImageViewやTextViewオブジェクトにキャストするのではなく、JavaでViewオブジェクトとして残しておくと便利ですか?XML ImageViewからfindViewByIdを使用するときに、JavaコードでViewを使用する利点はありますか?

private ImageView mPlayButton; 

mPlayButton = (ImageView) findViewById(R.id.playButton); 
mPlayButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Toast.makeText(MainActivity.this, "Audio Play", Toast.LENGTH_SHORT).show(); 
    } 
}); 

private View mCurrentSongButton; 

mCurrentSongButton = findViewById(R.id.currentSongIcon); 
mCurrentSongButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Intent intent = new Intent(MainActivity.this, SongInfo.class); 
     startActivity(intent); 
    } 
}); 

とは対照的に、私は援助を感謝しています。

+1

明示的なキャスティングでは、インタープリタがそれ自体を行う必要がなくなります。したがって、スピードの向上は最小限に抑えられます。 –

+1

それは私が不思議に思ったものです。私はそれがおそらく顕著な違いになるのではないと思う。ありがとう。 –

答えて

0

ViewImageViewにキャストする必要はありませんOnClickListenerを設定します。オブジェクトを別のクラスにキャストしても、オブジェクトのクラスは変更されません。ImageViewオブジェクトは、View、またはObjectとしてキャストされた場合、ImageViewのままです。したがって、オブジェクト自体の参照ラッパーに関係なく、同じメソッドが呼び出されます。

オブジェクトを子クラスにキャストする目的は、のロックを解除する必要があります。これ以外の方法は使用できません。したがって、ImageView専用のメソッドを呼び出す必要がある場合は、手前でImageViewにキャストする必要があります(ただし、メソッドはcall or useになります)。

要するに、子固有のメソッドを呼び出す必要がない場合は、オブジェクトをキャストしないでください。単純にコンパイラのオーバーヘッドにすぎません。

+0

お時間をありがとう!私はメソッドのアクセスを理解していますが、ImageViewメソッドを必要としないため、パフォーマンスやメモリの節約、ImageViewとしてキャストしないなどの問題についてはさらに疑問に思っていました。 –

+0

@AaronMonteabaro唯一のオーバーヘッドは、答えに記載されているようなパフォーマンスです。オブジェクトを「キャスティング」するためのコストがある場所。追加のオブジェクト/参照が作成されないので、メモリ上で追加のオーバーヘッドはありません。 – Abbas

+0

乾杯!ありがとう! –

0

あなただけにしてタイプが十分にある表示が、あなたがのsetText()、は、setEnabled(のような、特殊な操作が必要な場合は、リスナーをクリックし設定する必要がある場合)など、その後は利益があるofcourseの彼らに

0

をキャストする必要があります。 OnClickListenerのアクションを実行しているボタンや要素がアプリケーションで分からないためです。このため、findViewById(R.Id.PlayButton)を使用して、このような方法でコンピュータに「このボタンまたは要素を見つけ、このアクションを実行する」ことを指示することが必須です。また、XMLファイル内のPlayButton名を変更することもできます。また、XMLで変更する場合は、JavaファイルとR.Id.ChangedNameを変更する必要があります。

+0

ご質問ありがとうございます。質問は、XMLにあるものであっても、そこから利益が得られても、ビューをfindViewByIdからImageViewにキャストしないことのメリットです。 –

+0

ImageViewには、通常の再生ボタンではなく、再生ボタンとしてカスタマイズした画像を配置できるため、メリットがあります。 –