2012-04-03 13 views
0

私は現在、Androidアプリケーションを作成するにあたり、ゆっくりではあるが安定した動きをしています。現在、新しいウィンドウを作成して切り替えています。これはすべてうまくいっていますが、小さな問題が1つあります。 「戻る」ボタンを押すと、そのボタンが押されたときに戻ることを選択した場合でもアプリケーションが終了します。「戻る」ボタンを押すとアプリケーションが終了します

@Override 
public void onBackPressed() { 
    finish(); 
    return; 
} 

何か迷ったことはありますか?

ありがとうございます。

EDIT

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    MenuInflater menuInflater = getMenuInflater(); 
    menuInflater.inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) 
{  
    // Handle item selection 
    switch (item.getItemId()) 
    { 
    case R.id.menuItem1: 
     setContentView(R.layout.about); 
     return true; 
    case R.id.menuItem2: 
     System.exit(0); 
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 

EDIT 2:あなたは、 "ウィンドウを切り替える" ことIntentsを使用する必要がAbout.java

package weather.right; 

import weather.right.now.R; 
import android.os.Bundle; 

public interface About { 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.about); 
    } 

} 
+2

finish()は現在のアクティビティを終了します。他のアクティビティがまだ実行されていることは確かですか?ほとんどの場合、実際にはベットされていますrはAndroidを残して、戻るボタンを処理し、関数をオーバーライドしません。現在の活動を開始するために使用するコードを投稿できますか? – joshhendo

+0

私はわかりませんが、私が "ウィンドウの切り替え"をどのようにしているか見るために私の編集を見ることができます – Erik

+0

'System.exit()'や 'setContentView()'を ' MenuItems'を呼び出します。戻るボタンをオーバーライドするときに 'finish()'を呼び出すので、 'Activity'が現在実行中のものは、それを閉じると終了します。 – adneal

答えて

1

。 Androidでは「ウィンドウ」はActivityと呼ばれ、ActivityonCreate()コールのsetContentView()メソッドを使用して、Activityという視覚コンテンツを設定しています。

単にいくつかのパラメータでIntentを作成し、そのIntentstartActivity()を呼び出して、あなたの現在のActivityから別のActivityを起動します。ここでは例を示します。

Intent i = new Intent(this, TheNextActivity.class); 
startActivity(i); 

Androidのマニフェストファイルで2番目のActivityを含めることを忘れないでください。アプリケーション内のActivitiesすべてがそのファイルに含まれている必要があります。

その他の注意点は、実際にはSystem.exit()をAndroidで使用していないことです。 finish()に電話するだけです。 Androidにアプリケーションとそのリソースを自分で管理するのではなく管理することをお勧めしますが、実際にアプリケーションが停止していることを確認したい場合は、とにかくSystem.exit()を使用してください。 finish()に電話する場合は、onBackPressed()を上書きする必要もありません。これはAndroidのバックボタンを押したときの標準的な動作です。

また、Activityには、setContentView()を複数回呼び出す必要はありません。あなたはビジュアルを変更する必要があるときに新しいActivityを起動します(または、特殊なウィジェットの1つを使ってレイアウトを切り替えることもできます)。

これはまた、「問題」が発生している理由を説明します。 Activityを使用していますが、まだActivityが1つしかありません。finish()と呼ぶと、Activityが閉じられます。別のレイアウトのActivityを別のレイアウトで開始した場合、Androidはその第2のActivityを閉じてしまいます。

+0

ありがとう! 'TheNextActivity'を' About'に変更しcom.weather.right.nowでAbout.javaを追加したときに、コンストラクタのIntent(新しいView.OnClickListener(){}、クラス)が未定義です。 src> weather.right。なぜ私は知りませんが、なぜあなたは知っていますか? – Erik

+0

'Intent(NameOfTheCurrentActivity.this、NameOfTheSecondActivity.class)'である必要があります。 –

+0

多くの感謝! About.javaファイルの 'public void onCreate(Bundle savedInstanceState){'に '抽象メソッドはボディを指定していません?'という新しいエラーが発生しています。詳細については、最初の記事の私の編集を参照してください。なぜこのエラーが発生するのですか? – Erik

関連する問題