2011-06-22 12 views
4

私の活動のバックボタンでこのエラーが発生しています。すべての活動にこの問題があります。 Backボタンを押すとホーム画面に移動し、スタック内のアクティビティは最後になりません。私はログメッセージを出しましたが、いくつかのアクティビティではLogCatには表示されません。このアクティビティではログを出力します。しかし、いくつかのアクティビティがメソッドの中に入っていないように見えます。BackButtonはヒストリスタックの最後のアクティビティを呼び出さない

私のアプリケーションには3つのタブがあり、そのうちの1つはアクティビティの代わりにActivityGroupになります。しかし、私はその問題を考えていない、私はこのタブを削除し、それが起こっている。

私はそれをどのように解決するのですか。ホームスクリーンに行く代わりに最後のアクティビティにするにはどうすればいいですか?

実際、呼び出された最後の画面に移動します。ホーム画面で呼び出すと、メイン画面で呼び出すとショートカットとウィジェットが置かれ、この画面に移動します。 そして、私がドキュメントで読んだことは、履歴スタックの最後に行くはずです。つまり、この画面はスタックにありますが、私の活動はありません。右?

これを入れようとしましたが、すべてのアクティビティで機能しません。それはホーム画面に行くのを続ける。私は何ができるのか分からない。

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
       finish(); 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 

私もonBackPressed()メソッドで試しましたが、何もしませんでした。また、finishを呼び出す代わりに、私は新しい意図を持って試してみて、ある種のアクティビティを明示的に呼びましたが、何もしません。

たくさんありますので、私の活動はすべてここに入れることはできません。
しかし、これは1つで、これで何かがうまくいくなら、他のものに実装することができます。ありがとう。ここで

public class MyActivity extends Activity { 

    private ListView listview; 
    private ImageView imgView; 
    private Resources res; 
    private Drawable transition; 
    private SimpleCursorAdapter adapter; 
    private DataHandlerDB handler; 
    private SQLiteDatabase db; 
    private OpenHelper helper; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main);   
     helper = new OpenHelper(this); 
     db = helper.getWritableDatabase(); 
     setBasicContent(); 

    } 

    @Override 
    public void onStart() { 

     super.onStart(); 
     helper = new OpenHelper(this); 
     db = helper.getWritableDatabase(); 
     setBasicContent(); 

    } 

    @Override 
    public void onDestroy() { 

     super.onDestroy(); 
     DataHandlerDB.selectTopCalls(this).close(); 
     db.close(); 
     helper.close(); 

    } 

    @Override 
    public void onPause() { 

     super.onPause(); 

    } 

    @Override 
    public void onStop() { 

     super.onStop(); 
     DataHandlerDB.selectTopCalls(this).close(); 
     db.close(); 
     helper.close(); 

    } 

    @Override 
    protected void onResume() { 

     super.onResume(); 
     setBasicContent(); 

    } 


    public void setBasicContent() { 

     listview = (ListView) findViewById(R.id.list_view); 

     Cursor c = DataHandlerDB.selectTopCalls(this);  

     c.moveToFirst(); 

     startManagingCursor(c);  

     adapter = new SimpleCursorAdapter(this, R.layout.list_item, c, 
       new String[] { DataHandlerDB.CONTACT_NAME_COL, 
         DataHandlerDB.CONTACT_NUMBER_COL, 
         DataHandlerDB.CONTACT_DURATION_COL, 
         DataHandlerDB.CONTACT_DATE_COL }, new int[] { 
         R.id.contact_name, R.id.phone_number, R.id.duration, 
         R.id.date });  

     listview.setAdapter(adapter); 
    } 
} 

その次のように呼ばれるActivityGroup拡張アクティビティです:

tabHost.addTab(tabHost.newTabSpec("three").setIndicator("Filter Options", 
       res.getDrawable(R.drawable.filteroptionsiconfile)) 
       .setContent(new Intent(this, FilterOptionsGroup.class))); 

FilterOptionsGroup.java

public class FilterOptionsGroup extends ActivityGroup { 

    public static FilterOptionsGroup group; 
    private ArrayList<View> history; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     this.history = new ArrayList<View>(); 
     group = this; 

     View view = getLocalActivityManager().startActivity(
       "FilterOptions", 
       new Intent(this, FilterOptions.class) 
         .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) 
       .getDecorView(); 

     replaceView(view); 

    } 

    public void replaceView(View v) { 
     // Adds the old one to history 
     history.add(v);   
     // Changes this Groups View to the new View. 
     setContentView(v); 
    } 

} 
+0

新しいアクティビティを開始するときはいつもfinish()を呼び出しますか? –

+0

いいえ、私はそれを呼びますか? – rogcg

+0

いいえ、あなたはしないでください。スタックからアクティビティを破壊していないことを確認するだけです。 onBackPressed()および/またはonKeyDown()を削除してみてください。それは動作しますか? ActivityGroupを拡張するアクティビティを投稿する必要があります。 –

答えて

1

を設定している場合があります。彼らは、タブのホスト画面である前景ビュー内に座っているし、戻るボタンは、前のアプリにあなたをドロップします。

+0

私は確かに何が起こっていることです。私はどうしたらいいですか? – rogcg

+0

タブホストを持つクラスに変数を作成し、タブのホストタブの位置をキャプチャすることができます(識別子が私のものであることをちょうど1,2,3と覚えていません)。また、戻るボタンでchangeTab(# )。私はそれが完全にはっきりしているかどうかわからないので、あなたはまだ混乱している場合は私に知らせて、私は一緒にコードを投げることができます – Mutmatt

0

はこれを呼び出している活動ですおそらく私を仕上げる活動自分ですか? onkeydownをオーバーライドしない場合、デフォルトの動作は「戻る」ボタンを処理することです。 backButtonPressedとonBackPressedを混同していることに注意してください。だから、あなたが本当にshouldn ......あなたが活動

public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     if (getApplicationInfo().targetSdkVersion 
       >= Build.VERSION_CODES.ECLAIR) { 
      event.startTracking(); 
     } else { 
      onBackPressed(); 
     } 
     return true; 
    } 
<snip> 

のためのAndroidのソースから右の方法...

をオーバーライドしていることを確認するために

を@Overrideアノテーションを使用何かをする必要があっても。あなたの活動の全てがタブホスト内にカプセル化されており、それらはすべて、彼らが本当にスタックに座っていないタブでホストされている場合は

+0

この実装は解決しませんでした。 – rogcg

0

マニフェストをチェックし、あなたはandroid:noHistorytrue

+0

私はマニフェストファイルにそれを持っていません。これをここに追加しました。 rogcg

0

onKeyDownメソッドの先頭に super.onKeyDown(keyCode, event);を呼び出してみてください。 私は同様の問題を抱えており、解決策でした。

関連する問題