0

私は Android が初めてで、最初に簡単なアプリケーションを作成しています。3 つの画面を持つクライアントで構成されます。最初の画面で、ユーザーはサーバーに接続するための IP を求められます (私は EditText とボタンを使用します)。接続が正常に確立されると、サーバーから一部のデータが取得され、クライアントは空白の画面にデータを表示します (私は TextView を使用します)。これが2番目の画面になります。次に、ユーザーはサーバーから取得したデータに関する詳細情報をサーバーに要求できます。これが 3 番目の画面になります (ここでも TextView を使用します)。

問題は、それを実行する最善の方法がわからないことです。現在、ビューのすべてのコンポーネント (EditText、ボタン、TextView) を含む 1 つのアクティビティと 1 つの XML ファイルがあります。これまで、ユーザーがいる画面に応じて特定のコンポーネントを非表示にするために使用してきましsetVisibility(View.GONE);た (たとえば、最初の画面では、両方の TextView を非表示にする必要があります)。

私が直面している問題の 1 つは、電話を水平にすると、隠していたコンポーネントが再び表示されることです。ビューを非表示にすることが私の目的にとって理想的なことかどうかはわかりません。

複数のアクティビティを使用する必要があるのではないかと考えました。

私の最初のアプリを構築するためにあなたが私に与えることができる助けに本当に感謝しています.

4

3 に答える 3

1

このようにたくさん出てきているようです。AndroidはActivity、構成が変更されたときに破棄して再作成します。画面の回転は向きの一部です。それを回避するために、アクティビティは状態を保持する責任があります。onCreateそのために与えられたメカニズムはとですonSaveInstanceState。あなたの例では、次のようなことを行うことができます。

int uiPhase = 1;

@Override
void onCreate( Bundle data ) {
    uiPhase = data.getInt( "uiPhase", 1 );
    // inflate layout
    setPhase( uiPhase );
}

// invoke the following each time your screen changes
void setPhase( int newPhase ) {
    uiPhase = newPhase;
    switch( uiPhase ) {
        case 1: // show UI elements for first screen, hide others
            break;
        case 2: // show UI elements for second screen, hide others
            break;
        case 3: // show UI elements for third screen, hide others
            break;
    }      
}

@Override
void onSaveInstanceState( Bundle data ) {
    data.put( "uiPhase", uiPhase );
}

上記のパターンをあまり複雑にしたくありませんでしたが、可視性を設定するための良い方法は次のとおりです。

phase1view.setVisibility( uiPhase == 1 ? View.VISIBLE : View.GONE );
phase2view.setVisibility( uiPhase == 2 ? View.VISIBLE : View.GONE );
phase3view.setVisibility( uiPhase == 3 ? View.VISIBLE : View.GONE );

これにより、メソッドの繰り返しがsetPhaseかなりまとめられます。

于 2013-02-14T14:22:19.957 に答える
1

アプリを複数のアクティビティ/フラグメントに分割することを強くお勧めします。各画面のロジックがどれだけ大きくなるかに応じて、各アクティビティには1つの責任しかないため、後でそれを行ってよかったと思います。

たとえば、メールアプリを見てください。すべてのメールを表示するリストアクティビティを取得し、1つを選択すると、メールの内容を表示する詳細アクティビティが開始されます。各アクティビティは、それぞれの作成と保守を容易にする1つのことのみを担当します。

また、それぞれに関連する部分しか含まれていないため、レイアウト定義が簡素化されます。

于 2013-02-14T14:23:30.173 に答える
-1

ボタンの可視性をGONE (ボタンは完全に「削除」されます。ボタンのスペースは別のウィジェットで使用できます) または INVISIBLE (ボタンは「透明」になります。そのスペースは別のウィジェットでは使用できません) に設定します。

の代わりに使用

setVisibility(View.GONE)

への変更

setVisibility(View.INVISIBLE) and try
于 2013-02-14T14:04:42.420 に答える