私はfindViewByIdを呼び出すようそれは、メンバ変数として参照を格納することが重要です効率については、この
// Do this in your onCreate method and store the references as class member variables
showDisplay1 = (LinearLayout)findViewById(R.id.display1);
showDisplay2 = (LinearLayout)findViewById(R.id.display2);
showDisplay3 = (LinearLayout)findViewById(R.id.display3);
// Do this somehwere in your code
showDisplay1.setVisibility(isA?View.VISIBLE:View.GONE);
showDisplay2.setVisibility(isB?View.VISIBLE:View.GONE);
showDisplay3.setVisibility(isC?View.VISIBLE:View.GONE);
のようにそれを行うだろうアプリケーションが作成されているときに一度だけ呼び出す必要があるため、(メンバー変数にアクセスするのに比べて)非常に高価なアクションですd(これは、アクティビティが破棄され、再び再作成されるため、方向の変更を反映します)。
これはかなりきれいできちんとしています。インラインif式は、この種の関数には非常に便利です。
myFunction((expression)?if_value:else_value);
あなたは括弧を入れて持っていない場合、変数は、すでにブール値である場合は、基本的に()
を無視することができます
int value = 0;
if(expression) {
value = if_value;
} else {
value = else_value;
}
myFunction(value);
の短いです。だから、これは細かいすぎ
myFunction((someVariable>3)?View.VISIBLE:View.GONE);
EDIT2に動作します:
int value = 0;
if(somveVariable > 3) {
value = View.VISIBLE;
} else {
value = View.GONE;
}
myFunction(value);
ので、代わりに、関数に渡す値を保持する変数を作る、あなたがそれを行うことができ、すべてのインライン。
編集: ああとところで:、View.setVisibility(...)
方法のため0
または8
を使用することはありませんしてください。これは非常に悪い習慣であり、価値が将来変化するならば、あなたのアプリケーションを破るでしょう。 View.VISIBLE
はすでにpublic static final int
です。つまり、コンパイラは、View.VISIBLE
のすべてを0
に置き換えます。バイトコードでは0
と同じですが、パフォーマンスに影響はありませんが、値を変更する場合は、新しいSDKのコンパイル時にすべての変更が自動的に行われ、手動による変更は必要ありません。毎回0
と8
を新しい値で置き換えてください!
涼しく、うまくいきました。 if文の中で別の関数を呼びたい場合はどうすればいいですか?例えば。 ig isA、hideを実行し、別の関数を実行します。 – bebeTech
これも同様にできます。普通の 'if'の中で動作するものはすべて同様に動作します。 – Tseng
うーん、私は文法を正しく理解してはいけません。私はshowDisplay1.setVisibility(isA?View.VISIBLE、functionA();: View.GONE)を試していました。 – bebeTech