2012-06-09 10 views
0

Я делаю приложение, которое содержит около 5 страниц вместе с начальным экраном, я знаю, что если я напишу finish() в методе onPause(), страница будет уничтожена после перехода пользователя на следующую страницу ,Закрытие предыдущих страниц в приложении

Мое требование таково, что я не хочу, чтобы AppPage 1 был уничтожен, пока не дойду до третьей страницы приложения, но как только пользователь перейдет на 4-ю страницу приложения, я хочу уничтожить все 1 , 2,3 приложения моего приложения, чтобы они не могли быть доступны, нажав кнопку «Назад» и добравшись до начального экрана моего приложения, которое я не убиваю при запуске приложения.

Так что я хочу спросить, возможно ли убить 1,2,3 страницы моего приложения, когда пользователь нажимает кнопку перехода на следующую страницу третьей страницы.

Благодаря

==== Редактировать =====

Запуск экрана -> AppPage1 -> AppPage2 -> AppPage3 -> AppPage4 (убийство AppPage1,2,3 здесь, так что если спина щелкнул пользователь достигает начиная Sceen) -> Appage 5 (убийство AppPage4)

==== Редактировать 2 =====

AppPage1.java

public class AppPage1 extends Activity{ 

Button goToAppPage2; 
BroadcastReceiver logout; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.apppage1); 

    IntentFilter intentFilter = new IntentFilter(); 
    intentFilter.addAction("com.closing.application.pages.AppPage1"); 

    logout = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      finish(); 
     } 
    }; 

    registerReceiver (logout, intentFilter); 

    goToAppPage2 = (Button) findViewById(R.id.goToAppPage2); 
    goToAppPage2.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      Intent i1 = new Intent(AppPage1.this, AppPage2.class); 
      startActivity(i1); 
     } 
    }); 

} 

@Override 
protected void onDestroy() { 
    // TODO Auto-generated method stub 
    super.onDestroy(); 
    unregisterReceiver(logout); 
} 

}

AppPage2.java

public class AppPage2 extends Activity{ 

Button goToAppPage3; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.apppage2); 

    Intent intent = new Intent("kill"); 
    intent.setType("spartan!!!"); 
    sendBroadcast(new Intent(this, AppPage1.class)); 



    goToAppPage3 = (Button) findViewById(R.id.goToAppPage3); 
    goToAppPage3.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      Intent i1 = new Intent(AppPage2.this, AppPage3.class); 
      startActivity(i1); 

     } 
    });  
} 
} 
+0

вашего фактическое требование, когда и в четвертой активности в стеке активности, то вы не хотите, чтобы уры приложения поддерживает возврат к действию 3 в действие 2 в действие 1 при нажатии кнопки «Назад». –

+0

нет Я хочу, чтобы эти страницы были закрыты, полностью убиты .... как использование 'AppPage3.finish()', 'AppPage2.finish()', 'Appage1.finish()' на соответствующей странице убьет эти страницы но я хочу, чтобы они были убиты здесь после того, как я достиг AppPage4. – Sumit

+1

Ошибка в AppPage2. Когда вы отправляете широковещательное сообщение, используйте именно тот код, который я вам дал. Вам просто нужно заменить «com.example.ACTION_LOGOUT» на ваш «com.closing.application.pages.AppPage1». Имя действия должно быть одинаковым. Class. Прочитайте о широковещательных сообщениях на Android, если вы не понимаете поведение. Я надеюсь, что это помогает! :) –

ответ

2

Вы можете добиться этого с помощью широковещательного сообщения. Я сам использую его в том случае, если действия зависят от пользователя, который должен войти в систему, поэтому, когда он выходит из системы, все эти действия должны быть завершены, и остается только экран входа в систему.

Сначала зарегистрируйте трансляцию в действиях, которые должны быть завершены.Если количество видов деятельности, является большим, то вы можете создать родительскую активность из которых другие могут распространяется, так что вам не придется повторять этот код так много раз:

IntentFilter intentFilter = new IntentFilter(); 
intentFilter.addAction("com.example.ACTION_LOGOUT"); 
BroadcastReceiver logout = new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     finish(); 
    } 
}; 
registerReceiver (logout, intentFilter); 

Не забудьте отменить его OnDestroy():

unregisterReceiver(logout); 

Отправить радиопередачу, если вы хотите, чтобы закончить предыдущую деятельность:

Intent broadcastIntent = new Intent(); 
broadcastIntent.setAction("com.example.ACTION_LOGOUT"); 
sendBroadcast(broadcastIntent); 
+0

Извините, что я новичок и не в состоянии реализовать это в своем приложении, требование, о котором я упомянул в вышеприведенном вопросе, можете ли вы, пожалуйста, дать мне более подробный ответ. Благодарю. – Sumit

+1

Добавьте первую часть, где широковещательный приемник создан для вашего метода AppPage1, AppPage2 и AppPage 3 onCreate(). В тех же действиях отмените регистрацию получателя на метод onDestroy(). Затем из вашего AppPage4 отправьте широковещательное сообщение с последней частью, а действия 1,2 и 3 будут завершены автоматически, потому что они получат широковещательное сообщение, и они будут исполнять инструкцию finish(). –

+0

все еще не может заставить его работать :-(.... Я прикрепляю код выше .. Я попытался закрыть AppPage1 из AppPage2, используя это ... Пожалуйста, взгляните на код и скажите мне, какую ошибку я делаю! – Sumit

0

Попробуйте это,

Использование startActivityForResult(intent,0) вызвать активность 2 от деятельности 1 и написать следующий код в деятельности 1

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     switch (requestCode) { 
     case 0: 
      if (resultCode == RESULT_OK) { 
       finish(); 
      } 
     } 
    } 

Do аналогично в действии 2 и вызовите действие 3, используя startActivityForResult.

Окончательно заполните мероприятие 3 перед вызовом Activity 4, вы должны позвонить только finish(). Если вы назовете finish() в действии 3, метод обратного вызова onActivityResult, записанный в предыдущей операции, будет выполнен, и он завершит сам.

+1

Если я хорошо понял, он хочет, чтобы страницы 1,2,3 были недоступны. При запуске 4-го действия, если он использует этот флаг, домашний экран также не будет доступен. –

+0

s я понял. –

+0

Я изменил свой код выше. –

0
YourActivityName.this.finish(); 
       ^^^^ 

попробовать это это не позволит пользователю вернуться к этой деятельности

+0

Я не думаю, что это то, что мне нужно! – Sumit

0

вы можете переопределить метод onBackPressed() в 4-й странице, так что, когда пользователь нажимает кнопку обратно К.Е. он будет вынужден перейти на главную страницу или все, что вам нужно.

public void onBackPressed() { 
     //code here, like calling back the main page of your app 
    } 

Скрытые вокруг я нашел этот вопрос, может быть, третий ответ может помочь вам:

How to close all the activities of my application?

+0

ссылка кажется полезной ... позвольте мне попробовать это :-) – Sumit