-1

世論調査だと思い込む前に、これを全部読んでください。最も人気のあるものを決定しようとするのではなく、十分な情報に基づいた決定を下すための情報と参考文献を探しています (@PéterVarga)

これは私の最初の質問です。私は何度も立ち寄ったので、実際に自分自身を悪化させていると感じたので、ようやく登録しました。私は長所と短所が欲しいので、この質問は非常にオープンエンドです。私は Android を採用しようとしましたが、Android がどのように物事 (XML、アクティビティ、アクティビティの破棄) を行うかを試してみました。通常、私は WxWidgets の人間なので、これは非常に異なっていると感じます。読めば読むほど理にかなっています。この質問は、ボタンだけでなく、すべてのコールバックに適用されます。これまでのところ、Android のチュートリアルとガイドは、(ほとんど) 何かをすばやく実行することを目的としているようです。私が言ったように、私は Android を採用しようとしていますが、Android 用の別のタット アプリを作成するつもりはありません。

タイトルが示すように、これにはボタンを使用しましたが、はい、任意のコールバックです。

最初の使用例「質問」 2 つのフラグメント A と B、および 2 つのアクティビティ X と Y を考えます。ここで、A にリストが含まれ、B にそのリストのアイテムの詳細が含まれているとします (一般的な設定) ランドスケープ モードのアクティビティの場合X は、ポートレート モードで何も選択されていない場合に、A と B の両方のフラグメントを表示します (そして、何らかの手段で保存された選択 (潜在的/適切な方法について自由に言及してください)) 何かが選択されると、フラグメント A が X によって表示されます (または何かが選択された場合) フラグメント B はアクティビティ Y によって表示されます。横向きモードの場合、アクティビティ Y は「finish()」メソッドが呼び出され、それが破壊を開始することを理解しています。これは経験的に確認できましたが、これはつまり私の結論は、Google が実際に意図したものではなく (私は正しく推測できるかもしれませんが)、動作から推測されます。

XML onClick メソッドを使用すると、B がそのコールバックを取得することがあります。それが終了した場合、どうすれば代わりに A に送られますか? フラグメントにロジックを追加する必要がありますか? (新しい onClickListener インラインを作成することによって) 代わりに、基本的にすべてのクラスを拡張し、onClickListener を実装するため、独自の onClick メソッドを持つことができるボタン用の独自のクラスを持つ WxWidgets でおそらく行うことを行う必要がありますか?

宿題に役立つ場合は、おそらく構成変更イベントをキャッチしようとするべきではないことを学びました。アクティビティが閉じられて再起動されることを受け入れるので、 onCreate メソッドで向きを確認できます。方向を変えることはありません。私の最後の質問につながるのは、バンドルが唯一の方法ですか? 別のものを見つけましたが、非推奨であり、構成の変更のみを目的としていました。

ありがとう、長くてすみません。はい、かなり広いです。これについての議論はどこにもありません。(今日の投稿で、O'Reilly Android の本が到着しました。私はそれら (O'Reilly の本) がここで人気があると思います。ご存知の場合は、参照ページまたはこれがすべて何と呼ばれているかを教えてください。Wrox Android 4 Dev.本も届きました私はこれを PDF として持っていて、私の承認を示すために購入しました。再度、件名をお願いします。これは第 4 版 (またはちょうど 4) であるため、フラグメントのセクションはまだ読んでいませんが、それが多くの光を当てるとは思えません。 )

ところで、私は同様の質問を横に見ることができ、これに投稿をクリックするとそれらを読んでいます。もしそうなら、それは私がまだこれを質問と見なしているからです。

編集1:(編集は明確化ではなく更新であり、基本的に新しい部分です)これを読んでいる人は誰でも(1は未回答のQの250ページにあり、1ページあたり50です....)私の考えを投稿しますので、あなたができるかもしれません答えを得るために(そうでない場合)、次のようなことを試すことにしました:

this.MemberOfClass = 0;
button.setOnClickListener(new View.OnClickListener() {            
    public void onClick(View v) {
        MemberOfClass++;        
        MethodOfClass();
    }
});

ここで (MemberOfClass の意味を説明するために「this」を使用しました) MethodOfClass は OnClickListener のメソッドではなく、これが発生するクラスのメソッドです (Java のスコーピングが好きか嫌いかはわかりません)。このコードが正確に配置されている場所に基づいて、どの MethodOfClass が呼び出されるかを正確に制御するフラグメント (またはアクティビティ) (私の例に従うアクティビティ X または Y)。

小さなメモリフットプリントと低スペックシステムでの使用に適したソフトウェアを本当に重視するプラットフォームでオブジェクトを作成するのは非常に無駄に思えますが、より良い方法が見つからないため、この質問です。

編集 2: XML 部分を整理しながら (ボタン プリミティブを使用して)、ボタンごとに個別のボタン クラスを作成する方法を検討しています。

4

2 に答える 2

1

コールバック メソッド名で XML onClick 属性を指定すると、現在フラグメントを保持している Context 内で指定されたメソッドを見つけようとします。この場合、ビューの説明 (XML レイアウト) を機能ロジックから分離することをお勧めします。したがって、フラグメントごとに異なるオンクリックリスナーを実装したいと思います(匿名クラスとして宣言するか、個別のクラスとして宣言するかに関係なく)。

ボタンごとに独自のクラスを作成することもできますが、オブジェクト指向パラダイムの POV から考えると、あまり良い考えではありません。通常、新しいクラスを作成する理由は、一般的に使用されるエンティティ (多数のインスタンスで構成される) を一般化するためです。議論されている状況では、ボタンはおそらく特定のアクションのみに固有であるため、アクション タイプごとに新しいクラスを作成する必要はありません。

リスナーの onClick メソッドを呼び出したアクティビティを特定する方法もあります。onClick() 内のどこかで、提供されたビュー引数の view.getContext() を呼び出すだけで、それが ActivityA インスタンスまたは ActivityB インスタンスのいずれかであるかどうか、instanceof 演算子がオンになっているクラスをチェックします。

さらに、Java コーディング規約に固執し、大文字で始まるクラス フィールドとメソッドの名前を付けないようにすることをお勧めします。他の人があなたのコードをより速く、より明確に読んで理解するのに役立ちます。

于 2013-02-25T08:27:05.087 に答える
0

Anonymous Classほとんどの場合、必要なだけなので、別のクラスを作成してOnClickListenerone instanceを実装するのは無駄です。良い習慣として、この匿名オブジェクトを a で作成するのが好きです。次のようなを作成するメソッドよりも:methodcreateRequestItemPositiveListner()Dialog

dialogBuilder.setPositiveButton("Yes",new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            //do request item things...
        }
    });

私はこれを好む:

dialogBuilder.setPositiveButton("Yes", createRequestItemPositiveListener());

読みやすく、ダイアログの「PositiveButton」で実行されたコードを検索したい場合は、ダイアログ作成のどこかのコードよりもメソッドの方が簡単request item thingsです。少なくとも30が必要な場合、事態はさらに悪化します-50行のコード、ダイアログの作成がめちゃくちゃになるので、理解を深めるためにのClean Code本を読むことをお勧めします。Uncle-Bob (Robert C. Martin)

于 2013-07-22T16:31:36.533 に答える