0

これは、Android アプリの Java コードをプログラミングする際に Eclipse SDK で使用される構文に関する質問です。

私は主にアセンブラー (ずっと前) と C でのプログラミングに慣れている組み込みマイクロコントローラー エンジニアです。背景情報については .com を、実際の例については stackoverflow.com を参照してください。非常に便利です。

だから、自分がやりたいことをするためのコードを書くことに問題はありません。なぜなら、私はいつもそうしてきたからです。

たとえば、GPS にアクセスするには、私のコード行の 1 つを次のように読み取ります。

LocationManager locationManager = (LocationManager)
this.getSystemService(Context.LOCATION_SERVICE);

しかし、これに短縮することができます:

LocationManager locationManager = (LocationManager)getSystemService(LOCATION_SERVICE);

私は 2 番目のバージョンの方が好きですが、なぜいくつかの例が最初の例のように書かれているのでしょうか? どちらもうまく機能しているようです。「クラス」を使用すると、さらに複雑に見える他の例を見てきました。

第二に、これは本当に単純なことを行うための複雑な方法ではありませんか?

Toast.makeText(getBaseContext(),"Hello World",Toast.LENGTH_SHORT).show();

なぜだめですか:

Toast("Hello world");

今では、コードを書くのに以前の 4 倍の時間がかかります。

4

4 に答える 4

0
  1. thisどこにでも置くのは初心者のOOPっぽいスタイルです。それはあなたの2番目の例で暗示されています.2番目の例はより一般的なスタイルです.

  2. さて、これはちょっとしたエンジニアリングと関係があります。はい、2 番目の短い例を実装することはできますが (それToastはクラスであり、関数ではありませんが、同様のことが機能します)、実行したい多くの重要なことが妨げられます。AToastは、それほど軽量なオブジェクトではない場合があります。キャッシュしたいかもしれません。そのため、最初にインスタンスを取得してmakeTextから、それを呼び出しますshow。インスタンスには、Toast制御する必要がある完全なライフサイクルもありますが、単純な例では制御できません。インスタンスはおそらくさらに構成などを受ける可能性があります。要するに、 Hello, worldのコード片からは明らかではない理由があります。

于 2012-07-18T17:03:16.903 に答える
0

私は物事を最も簡単な方法で、そして私の能力の限りを尽くして説明しようとします.

1. " .this" は、Javaの現在のオブジェクトを参照します。" .this" は、そのクラスの独自のインスタンス変数メンバーにアクセスする現在のオブジェクトを明示的に指します。

2.「this」を使用すると、より具体的になります。

3.トーストの場合、トーストcontextを表示するアクティビティ (つまり、どのアクティビティ) を指す " " パラメータが必要です。

4. Anonymous クラスに属していない場合は "this" を使用できます。Anonymous クラスにいる場合は、Your_Activity_Name.thisコンテキストの代わりに " " を使用できます。

5. getBaseContext, getApplicationContextアプリケーションの一部へのグローバル アクセスのようなものです。

6.私は常にYour_Activity_Name.thisコンテキスト内の場所を好みます。コンテキストとは、トーストが表示されるアクティビティを意味します。はい、活動には方法はありません Toast(String s)

于 2012-07-18T17:40:58.117 に答える
0

Android と Java プログラミングの世界へようこそ。あなたはアセンブリ言語のバックグラウンドを持っているので、私のアドバイスは次のとおりです。より多くのタイピングに慣れてください。:)

最初のコード フラグメントについて: まず、this.への呼び出しの修飾子getSystemService()が冗長です。あなたはそれを落とすことができます。LOCATION_SERVICE次に、名前を静的にインポートすることにより、修飾子を削除できます。コンパイル ユニットのインポートに次のようなものを追加します。

import static android.content.Context.LOCATION_SERVICE;

または、名前空間の汚染を気にしない場合:

import static android.content.Context.*;

2 番目のフラグメントについて: アーキテクチャ上の理由から、Toast最終的にはポップアップ ウィンドウを何らかのアプリケーション コンテキストに関連付ける必要があります。makeToastこれを可能にするのは、ファクトリ メソッドの最初の引数です。(ちなみに、必要なgetContext()のは ではなく、だけですgetBaseContext()。フィールドにコンテキストを隠しておくこともできます。) — の 3 番目の引数makeTextに関しては、デフォルトの表示時間を持つファクトリ メソッドのバージョンを提供することもできますが、 Android ではそれが提供されていないため、3 番目の引数にも行き詰っています。を静的にインポートすることで、修飾子を再び回避できますLENGTH_SHORTToast最後に、ファクトリ メソッドはオブジェクトを返すだけです。まだ必要ではありshow()ません。隠して、将来表示することができます。作成を分離するのは良い設計ですToast画面上に置くアクションからのオブジェクト。

于 2012-07-18T17:27:12.933 に答える
0

キャスト後の改行は、行が長くなりすぎないようにするためのものです。

これについて:

Toast.makeText(getBaseContext(),"Hello World",Toast.LENGTH_SHORT).show();

...あなたが言うように書くのは簡単ですが、それ同じことをしません。基本的に、その行は

  1. グラフィックスを配置する最も外側の囲み場所を見つける
  2. 表示するテキストを設定し、書式設定などを設定します
  3. そしてそれを示します。

常に最も外側の世界に書き込むとは限らないため、それらを分割する必要があります。たとえば、いくつかの異なるテキストのチャンクを作成しshow90たりhide()、後でそれらを作成したりする場合があります。(たとえば、エラー メッセージと成功メッセージを考えてみてください。一度ビルドしてから、不要なものを表示/非表示にするのが好きです。)

ここで、必要なコンテキストを定義でき、可視性を台無しにしたくない場合は、まさにそれを行う関数を作成できます。

于 2012-07-18T16:54:53.910 に答える