0

У меня есть приложение, которое содержит действие с текстовым полем и кнопкой, и службу, которая использует это имя, введенное пользователем в текстовое поле. После того как я ввожу имя и Запустить службу (на кнопке Click), я называю финиш(), чтобы уничтожить активность, как показано в коде ниже:Использование метода finish() в действии

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.fragment_start); 
    Log.e("onCreate", "Activity"); 

    final Button button = (Button) findViewById(R.id.startServiceBTN); 
    button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      // Perform action on click 
      EditText mEdit = (EditText) findViewById(R.id.nameTB); 
      if (!hit) { 
       hit = true; 
       if (mEdit.getText().toString().trim().length() > 0) { 
        Intent intent = new Intent(StartActivity.this, BLEService.class); 
        intent.putExtra("Name", mEdit.getText().toString()); 
        startService(intent); 
        StartActivity.this.finish(); 
       } else { 
        Toast.makeText(getApplicationContext(), 
          "Please Enter a Valid Name", Toast.LENGTH_LONG) 
          .show(); 
       } 
      } 

     } 
    }); 
} 

Проблема, которую я лицо, хотя я называю финишная(), Я мог видеть активность приложений в недавно открывшемся приложении Icon Tray (справа от самой мягкой кнопки), которая находится рядом с кнопкой Back и Home на Nexus 5.

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

if (hit) { 
     EditText mEdit = (EditText) findViewById(R.id.nameTB); 
     mEdit.setText(BLEService.NameFromActivity); 
     finish(); 
    } 

Хотя выше фрагмент кода помогает в поле Text, чтобы не иметь нулевое значение, то App активность снова доступна в Recent Apps Tray.

Вот моя проблема. Если я пропустил/запустил приложение в ленте «Недавние приложения», чтобы полностью очистить его, я начинаю получать значение null в качестве значения Name в журналах служб вместо имени, введенного пользователем.

ответ

1

Вам просто нужно добавить следующую строку в activity тег в файле манифеста,

android:excludeFromRecents="true"

Установка его true исключит эту Activity от показа в недавнем лотке. Смотрите ниже,

<activity 
      android:name="com.example.MainActivity" 
      android:excludeFromRecents="true" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

ссылка http://developer.android.com/guide/topics/manifest/activity-element.html

+1

Стоит сказать, что приложения, которые перечислены в приложениях _recent list_ не обязательно являются активными в памяти (проверьте это: http://android.stackexchange.com/questions/47652/do-applications-that-remain -в-последние-приложения-список-нитепритягиватель-ресурсы). – Trinimon

+0

@Trinimon: Вы правы. Спасибо за ссылку. –

+0

Hi Spring Breaker, Спасибо за ответ. Включение excludeFromRecents делает для журнала только NULL значение вместо NAME. Мне нужно как-то сохранить значение (НАЗВАНИЕ) из активности до уничтожения объекта Activity. Я буду проверять с помощью SharedPrefs и обновлять здесь. –

1

Если вы хотите сохранить текст, введенный пользователем, вы можете использовать Shared Preferences, чтобы сохранить его.

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = sharedPref.edit(); 
editor.putString("PREFERENCE_NAME", mEdit.getText().toString()); 
editor.commit(); 

Также в вашем onCreate, вы могли бы принести, что предпочтение.

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
String defaultName = "John Doe"; 
String name = sharedPref.getString("PREFERENCE_NAME", defaultName); 
mEdit.setText(name); 
Смежные вопросы