2012-03-08 11 views
1

Activity1に(カスタム)リストビューがあります。行をクリックすると、別の(カスタム)リストビューでActivity2が開きます。両方のリストビューの行には、imageview、checkbox、textviewの2つのオブジェクトがあります。
アクティビティ2ですべてのチェックボックスをオンにして、電話機の[戻る]ボタンをクリックすると、リストビューの各行のチェックボックスがオンになっているはずです。ただし、[戻る]ボタンをクリックしても、何も起こりません([ログキャット]、[新しい行がありません]、[ログがありません]、[何もありません]
私はBACKボタンを上書きすると思ったので、クリックするとActivity1が開きます。Androidオーバーライド戻るボタン

public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     Intent intentstart = new Intent(Activity2.this, Activity1.class); 
     startActivity(intentstart); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event);  
} 

これはうまくいきますが、私は嫌な思いをしています。これは良い解決策ですか?より良い解決策はありますか? これはBACK btnの通常の動作を殺すためです。

通常の動作:

  1. Activity1が開きます。私は行をクリックします - >アクティビティ2が開きます。私は戻る - > Activity1を見る。私は行をクリックします - > Activity2が開きます。数分プレイした後、私はActivity1にいます。私はクリックして、私は自分のアプリのオープンスクリーンにいます。

新しい動作

  1. Activity1が開きます。私は行をクリックします - >アクティビティ2が開きます。私は戻る - > Activity1を見る。私は行をクリックします - >アクティビティ2が開きます。数分プレイした後、私はアクティビティ1にいます。クリックするとアクティビティ2が開きます。その後、もう一度 - >アクティビティ1が開きます。その後、もう一度 - > Activity2が開きます。これまでに開いたすべてのアクティビティをロールバックするまで続きます。

答えて

0
Intent intentstart = new Intent(Activity2.this, Activity1.class); 
intentstart.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intentstart); 

このフラグが開かれたアクティビティを削除します。

たとえば、アクティビティA、B、C、Dからなるタスクを考えてみましょう。アクティビティBのコンポーネントを解決するインテントでDがstartActivity()を呼び出した場合、CとDは終了し、B指定されたインテントを受け取ってスタックになりました:A、B

アクティビティ2のチェックボックスをオンにし、戻るときにアクティビティ1をチェックする場合は、 あなたは、チェックボックスに

P.S.をチェックするために)(

startActivityForResult(intent, requestCode);//when start new activity 

Intent resultIntent = new Intent(); // when finish activity2 
resultIntent.putExtra("selected", selected); //send checked data to activity1 
setResult(Activity.RESULT_OK, resultIntent); 
finish(); 

を使用して、onActivityResultオーバーライドする必要がありますBackボタンが押されているときに、onBackPressed()をオーバーライドしてアクションを実行できます。

+0

ありがとうございます!作業とその説明も明確です! – erdomester

+0

私はsqliteとループを使ってチェックボックスの状態をチェックしています。あなたが書いたものはもっと簡単かもしれませんが、一度働いたら私のコードを変更したくありません:) – erdomester

0

あなたがする必要があるのは、startActivityForResult()を使ってアクティビティを開始することです。これにより、onActivityResult()を上書きすることができます。結果が得られたら、データビューを更新するだけです。

また、私は常に、ユーザーが操作を肯定的に確認して操作を取り消すために「保存」ボタンを提供することを必然的に求めていることがわかります。

関連する問題