0

私のアプリケーションには画面があり、アクティビティは 1 つしかありません。私の主なアクティビティは次のようなものです: 画面を呼び出すメソッドがありますが、アクティビティを使用しませんでした (使用方法がより複雑であるとどこかで読みました)。メソッドを使用しましたが、問題が 1 つあります。

アクティビティを開くと、loginScreen がOKになります

loginBtn をクリックすると、listScreen が正常に表示されます

しかし、loginScreenに戻るためにlistScreenの戻るボタンをクリックすると、アプリが閉じてエミュレーターのホーム画面が開きます。

通常は;

loginScreen --> loginBtn --> listScreen --> listBtn --> writeScreen

私が欲しいのは、エミュレーターの「戻る」ボタンでこのパスに戻ることです。この方法では、メソッドに 1 つのことしか設定できないため、戻るボタンをオーバーライドしてそれを行いたくありません。

public class EmailActivity extends Activity 
{
public void onCreate(Bundle savedInstanceState) 
        {
        super.onCreate(savedInstanceState);
        // setContentView(R.layout.main);
        loginScreen();
    }

public void loginScreen() 
{
        this.setContentView(R.layout.main);
                Button loginBtn = (Button) findViewById(R.id.btnLogin);

        loginBtn.setOnClickListener(new Button.OnClickListener() {

            @Override
            public void onClick(View v) 
                        {
                listScreen();
            }

        });
}

public void listScreen()
{
            this.setContentView(R.layout.list);
                Button listBtn = (Button) findViewById(R.id.btnList);

        listBtn.setOnClickListener(new Button.OnClickListener() {

            @Override
            public void onClick(View v) 
                        {
                setContentView(R.layout.writeScreen);
            }

        });

}
4

3 に答える 3

2

アプリで使用する画面ごとにアクティビティを作成する必要があるため...メソッドを呼び出すだけで、メモリにはアクティビティが1つしかないため、戻るボタンでアクティビティをポップしてホームに戻ります...これを読んでください: http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html

別の画面 (アクティビティ) を呼び出したい場合は、インテントのインスタンスを作成します。これは、システムに「おい!、ここで渡しているものを呼び出してください」と伝えます。たとえば、A1 と A2 という 2 つのアクティビティがあります。 A1 から A2 を呼び出したい場合は、次のようにする必要があります。

Intent intent = new Intent(A1.this,A2.class);
startActivity(intent);

A2 を A1 の上に押すので、押し戻すと A1 になります。

于 2012-04-17T18:59:47.570 に答える
1

あなたの質問に直接答えるために、あなたが求めたことを達成する唯一の方法は、戻るボタンをオーバーライドすることです. デフォルトでは、戻るボタンは現在のアクティビティを閉じて前のアクティビティに戻ります。あなたの場合、アクティビティが 1 つしかないため、アプリが閉じます。戻るボタンをオーバーライドするのは簡単で、「ビュー」を制御することもできます。

アクティビティ クラスのいくつかのクラス レベル フィールド (プライベート変数) を使用して、現在の場所を追跡できます。

private int currentView;
private int lastView;
private static enum Views {LoginScreen, ListScreen}

...
...

public void loginScreen() 
{

    lastView = currentView;
    currentView = Views.LoginScreen;

    this.setContentView(R.layout.main);
            Button loginBtn = (Button) findViewById(R.id.btnLogin);

    loginBtn.setOnClickListener(new Button.OnClickListener() {

        @Override
        public void onClick(View v) 
                    {
            listScreen();
        }

    });
}

public void listScreen()
{

    lastView = currentView;
    currentView = Views.ListScreen;

    this.setContentView(R.layout.list);
    Button listBtn = (Button) findViewById(R.id.btnList);

    listBtn.setOnClickListener(new Button.OnClickListener() {

        @Override
        public void onClick(View v) 
                    {
            setContentView(R.layout.writeScreen);
        }

    });

}

ただし、特に Android アプリの作成方法を学び、アプリ ストアで公開する方法を学びたい場合は特に、これは間違った方法で行っています。

アクティビティはより複雑ですが、それには十分な理由があり、基本を習得すると、後戻りすることはありません。画面ごとにアクティビティを作成することを強くお勧めします。もう少し作業を行う必要がありますが、最終的には、アプリの動作をより詳細に制御し、コードをより適切に保守できるようになります。
ここから始める

HC 以上をターゲットにしている場合は、Fragments も参照してください。

フラグメント

頑張れ。後悔することはありません!

于 2012-04-17T19:13:41.713 に答える
1

前の画面に戻るには、別のアクティビティを使用する必要があります。これで、アクティビティが 1 つだけになり、戻るボタンを押すと、アプリはそのアクティビティを閉じ、その結果、アプリケーション全体が閉じます。

それでもこの方法でやりたい場合は、ハードウェアの戻るボタンをオーバーライドして、アプリを閉じるのではなく、上記のメソッドを呼び出すことができます。

于 2012-04-17T19:02:04.737 に答える