Задать вопрос
Ответы пользователя по тегу Android
  • Обработка нажатий клавиш в custom view?

    Gariks
    @Gariks Автор вопроса
    Метод научного тыка выручает. Клавиатуру можно вызвать к элементам TextView и его дочерним таким способом

    	public void showSoftKeyboard(View view) {
    
    		if (view.requestFocus()) {
    			InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    			imm.showSoftInput(view, InputMethodManager.SHOW_FORCED);
    		}
    
    	}
    


    При этом view.requestFocus сработает только если у элемента стоят флаги view.setFocusable(true); или view.setFocusableInTouchMode(true);, а InputMethodManager.SHOW_FORCED обеспечивает корректное переключение вида клавиатуры при изменении ориентации экрана.

    Далее по порядку.
     EditText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI); // в альбомном виде не показывается поле ввода и прочее
     EditText.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS); // не показываются подсказки
    

    ^ эти действия можно выполнить и из XML файла задав нужные атрибуты, но у меня элемент генерируется программно.

    Обработка нажатия клавиш ExitText.addTextChangedListener и в самом TextWatcher процедура определения клавиши реализована на afterTextChanged(Editable s) (если вы меняете Editable в процессе работы afterTextChanged вызовется снова с измененными данными). TextWatcher ловит ТОЛЬКО текстовые кнопки, например, backspace он уже не обрабатывает, возможно нужно будет внедрять onKeyListener (еще не реализовывал).

    Есть еще такая интересная штука как TextView.OnEditorActionListener, но по опытам он срабатывает только тогда когда вы нажали кнопку «Готово» в альбомной ориентации клавиатуры, и не срабатывает на хадварную кнопку «назад», которая закрывает клавиатуру — получается через него не определить скрытие/закрытие клавиатуры.
    Ответ написан
    Комментировать
  • Циклическое обновление данных с REST сервиса в фоне (dataDroid)?

    Gariks
    @Gariks Автор вопроса
    Решил проблему в лоб. Создал еще один IntentService сервис с независимым от MainActivity классом requestListener
    	@Override
    	protected void onHandleIntent(Intent arg0) {
    				
    		String user_id=prefs.getString("user_id", "0");
    		Request updateRequest = new Request(RequestFactory.REQUEST_TWEETS);
    
    		updateRequest.put("method", "projects.feed");
    		updateRequest.put("id", user_id);
    		updateRequest.put(Tweets.CREATED,
    				prefs.getString(user_id + "_" + Tweets.CREATED, ""));
    		
    		requestManager.execute(updateRequest, requestListener);
    	}
    


    и таймер в MainActivity, который перезагружается на onStart либо после ручного обновления списка.
    	void startTimer() {
    		Intent intent = new Intent(context, TestService.class);
    		PendingIntent pendingIntent = PendingIntent.getService(context, 0,
    				intent, 0);
    		AlarmManager am = (AlarmManager) context
    				.getSystemService(Context.ALARM_SERVICE);
    		
    		am.cancel(pendingIntent);
    		
    		long interval_=1000 * 60 * Integer.parseInt(interval);
    
    		am.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime()
    				+ interval_, interval_, pendingIntent);
    	}
    


    Соответственно если в будущем придется добавлять функционал можно передавать extras сервису, а в нем самом уже, например фабрику запросов.
    Ответ написан
    Комментировать