2014-01-04 3 views
2

У меня есть такой код, но это, кажется, не работаетКак очистить данные при нажатии кнопки возврата устройства?

public static class DeleteDir { 

    public static void main(String args[]) { 
     deleteDirectory(new File(args[0])); 
    } 

    static public boolean deleteDirectory(File path) { 
     if (path.exists()) { 
      File[] files = path.listFiles(); 
      for (int i = 0; i < files.length; i++) { 
       if (files[i].isDirectory()) { 
        deleteDirectory(files[i]); 
       } else { 
        files[i].delete(); 
       } 
      } 
     } 
     return (path.delete()); 
    } 
} 

public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     Intent intent = new Intent(getApplicationContext(), 
       TeacherSide.class); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(intent); 
     finish(); 
    } 
    return super.onKeyDown(keyCode, event); 
} 

Может кто-нибудь, пожалуйста, помогите мне с этим?

+0

Что вы имеете в виду «это не похоже на работу»? Что происходит и что должно произойти? –

ответ

3

Для использования onKeyDown метод, который, вероятно, не самый лучший способ, чтобы использовать для кнопки назад, ваш код должен работать. Я тестировал ваш код, и он работал для меня. Проблема может заключаться в код, который вы запускаете при нажатии кнопки «Назад», а не на том, действительно ли выполняется код.

public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     Intent intent = new Intent(getApplicationContext(), TeacherSide.class); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(intent); 
     // you don't need to call finish(); because 
     // return super.onKeyDown(keyCode, event); does that for you 

     // clear your SharedPreferences 
     getSharedPreferences("preferenceName",0).edit().clear().commit(); 
    } 
    return super.onKeyDown(keyCode, event); 
} 

Вот еще один способ: onBackPressed() метод

Используйте Андроида:

@Override 
public void onBackPressed() 
{ 
    super.onBackPressed(); // this can go before or after your stuff below 
    // do your stuff when the back button is pressed 
    Intent intent = new Intent(getApplicationContext(), TeacherSide.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(intent); 
    // super.onBackPressed(); calls finish(); for you 

    // clear your SharedPreferences 
    getSharedPreferences("preferenceName",0).edit().clear().commit(); 
} 
+0

это, кажется, не работает: ( – kyo

+0

@kyo Каким образом это не работает? –

+0

У меня есть оценки, которые нужно записать в последнем действии, и я хочу очистить все баллы, точно так же, как очистить его в настройках -> Приложение -> Управление приложением -> myApps-- > Очистить данные – kyo

3

После 2.0 у нас есть onBackPressed(), чтобы обращаться с кнопкой «Назад».

Вы можете переопределить функцию onBackPressed() и реализовать логику

@Override 
public void onBackPressed()// called when the Back button is pressed 
{ 
// do stuff 
super.onBackPressed(); 
} 
+0

и не забудьте позвонить 'super.onBackPressed()' в конце –

+0

@LittleChild, да отредактирован –

+0

делать вещи первой^_^ –

4

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

@Override 
public void onBackPressed() 
{ 
    Intent intent = new Intent(getApplicationContext(),PreviousActivity.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    intent.putExtra("EXIT", true); 
    startActivity(intent); 
    finish(); 
} 

И если эта последняя активность или есть какой-либо PreviousActivity, затем поместить этот код перед setContentView()

if (getIntent().getBooleanExtra("EXIT", false)) { 
    finish(); 
}   
setContentView(R.layout.main); 

Таким образом, вы можете очистить данные.

1

Я предлагаю вам использовать onBackPressed(), как говорят другие люди, если вы не создали что-то ниже API 5, а затем перейдите на onKeyDown().

Если вы действительно хотите использовать OnKeyDown попробуйте этот код и проверить в журнале, если он работает, то поместить необходимый код внутри

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     Log.i("back press", "back"); 
     return true; 
    } else { 
     Log.i("else back ", "else back"); 
    } 
return super.onKeyDown(keyCode, event); 
+0

Я использую API выше 8 – kyo

Смежные вопросы