Урок 114. Android 3. Библиотека Support Library. Зачем нужна и как ее использовать на примере фрагментов

Обсуждение уроков
Don
Сообщения: 3
Зарегистрирован: 28 мар 2013, 19:55

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение Don » 25 май 2013, 02:01

Возможно не в тему,ну да ладно.К сожалению на форуме нет подобающего раздела.
Каким образом можно изменить цвет слов (именно отдельных слов,не текста в целом) в EditText?
Текст динамический.То-есть,вводимый текст сравнивается с определенным шаблоном,при совпадении меняется цвет.
Подскажите пожалуйста где и куда копать.Canvas? Paint? Я в догадках ))

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение rezak90 » 26 май 2013, 00:39

Вам нужно использовать SpannableStringBuilder
вот пример http://stackoverflow.com/questions/4897 ... ew-settext
R.id.team
Политика на форуме запрещена

Don
Сообщения: 3
Зарегистрирован: 28 мар 2013, 19:55

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение Don » 26 май 2013, 01:10

rezak90 писал(а):Вам нужно использовать SpannableStringBuilder
вот пример http://stackoverflow.com/questions/4897 ... ew-settext
Да,видел несколько примеров на Stackoverflow,но в моем случае проблема в том,что предыдущие значения цвета не сохраняются.
Вот пример.

Код: Выделить всё

public class HalloActivity extends Activity {
	
	EditText text;
	TextView setText;
	Integer number;
	SpannableString spString;
	ForegroundColorSpan fcs;
	SpannableStringBuilder ss;
	int nextStartIndex = 0;

	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hallo);
        text = (EditText) findViewById(R.id.editText1);
        setText = (TextView) findViewById(R.id.textView1);
        fcs = new ForegroundColorSpan(Color.RED);
        text.addTextChangedListener(tw);

    }

   
    void SetColorText(CharSequence txt,String compare){
    	String compareText = txt.toString();
        int startIndex = compareText.indexOf(compare,nextStartIndex);
        
        ss = new SpannableStringBuilder(txt);

        	if(startIndex != -1) {	
        		
        		ss.setSpan(fcs, startIndex, startIndex + compare.length(),
        										Spannable.SPAN_PRIORITY_SHIFT);
        		nextStartIndex = startIndex+compare.length();
        		 
    		
        	} 
        	
        	setText.setText(ss);	
    }
    
    
    TextWatcher tw = new TextWatcher(){
	   
	@Override
	public void afterTextChanged(Editable s) {
		
		
	}

	@Override
	public void beforeTextChanged(CharSequence s, int start, int count,
			int after) {
		
		
	}
	
	@Override
	public void onTextChanged(CharSequence s, int start, int before, int count) {
		
		SetColorText(s,"hallo");
	    
   }
    
   };
   
}
То-есть первоначально hallo закрашивается красным цветом,при следующей итерации - дефолтный.
Уже несколько часов пытаюсь найти решение,видимо данный метод здесь не действителен.Или я ошибаюсь?Надеюсь на вашу помощь.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение rezak90 » 26 май 2013, 02:56

потому что при каждом вводе текст заново присваивается, вам нужно запоминать места которые нужно окрашивать, и каждый раз при смене текста окрашивать весь текст заново
R.id.team
Политика на форуме запрещена

Don
Сообщения: 3
Зарегистрирован: 28 мар 2013, 19:55

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение Don » 26 май 2013, 17:26

rezak90 писал(а):потому что при каждом вводе текст заново присваивается, вам нужно запоминать места которые нужно окрашивать, и каждый раз при смене текста окрашивать весь текст заново
В этом то и вся проблема.Метод setSpan игнорирует все предыдущие значения.К примеру,возьмем статичный текст.

Код: Выделить всё

   void Set(){
	   ss = new SpannableStringBuilder("text text1 text2");
	   		
	   	
	   			ss.setSpan(fcs, 0, 3, 0);
	   			ss.setSpan(fcs, 5,9, 0);
	   			setText.setText(ss);
   }
Закрашивается только "text1".

......

Решил проблему.ForegroundColorSpan нужно инициализировать каждый раз ss.setSpan(new ForegroundColorSpan(Color.Red)),0,3,0);
Благодарю за содействие!

......

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

once2go
Сообщения: 8
Зарегистрирован: 01 май 2013, 20:29

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение once2go » 16 сен 2013, 14:48

Это все хорошо, но скажите любезные можно ли этой либой организовать как то лардж хипсайз в манифесте(или другим путем, а то приложение вылетает как бы не зарезал =( а хипа добавить никак не могу, обидно)
Заранее спасибо

SPAWN
Сообщения: 20
Зарегистрирован: 11 мар 2013, 21:59

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение SPAWN » 14 окт 2013, 13:16

Подскажите, у меня есть допустим 4 класса описывающие фрагменты в FragmentTransaction я их меняю. Как узнать какой класс находится в FragmentTransaction и как к нему обратиться?

Mike
Сообщения: 12
Зарегистрирован: 27 авг 2013, 18:28

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение Mike » 22 окт 2013, 11:53

Извините, может быть я где-то раньше что-то пропустил. В уроке сказано и показано на скрине, что при создании нового класса для фрагмента, для старых устройств, в поле Superclass, нужно указать не android.app.Fragment, а android.support.v4.app.Fragment. Но у меня в этом диалоге создания нового класса вообще отсутствует возможность выбора вариантов, кроме одного (надеюсь это можно поправить?):
Вложения
В чем может быть дело?
В чем может быть дело?
NewClass.png (18.28 КБ) 11866 просмотров

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение Foenix » 22 окт 2013, 13:11

потому что у тебя все уже отфильтровано, сотри строку, выделенную синим и пиши там fragment или что тебе нужно
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение rezak90 » 22 окт 2013, 14:13

ох уж эти окошки, интерфейсы и т.д.
в импортах же можно подставить всё что душа пожелает
R.id.team
Политика на форуме запрещена

Mike
Сообщения: 12
Зарегистрирован: 27 авг 2013, 18:28

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение Mike » 22 окт 2013, 14:43

Foenix писал(а):потому что у тебя все уже отфильтровано, сотри строку, выделенную синим и пиши там fragment или что тебе нужно
...блин. Ну ты просто ангел (на фоне сплошных невзгод). Я ж уже знал, что фильтры здесь наоборот работают, вроде даже что-то очищал, в каком-то месте даже вводить что-то пробовал, но там, значит, действительно ничего не было или вводил что-то несуразное. А здесь значит не попробовал вводить... от безнадеги ... Рефлекс, что на "пусто", - должно быть "все", а если и при этом пусто - значит и нет ничего ........... Моя четвертая искренняя балгодарность за короткий срок :D !

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение Foenix » 22 окт 2013, 21:15

хорошо, что находятся люди, такие приятные вещи говорят.. спасибо!
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
IgNa
Сообщения: 345
Зарегистрирован: 30 сен 2013, 12:18

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение IgNa » 07 дек 2013, 05:37

Человеки, а как сделать попроще то бы в api8 numberPicker работал ?
Всё тоже самое как с фрагментами ? или можно чисто один элемент как то добавить, а не всю библу.
Изображение

mad
Сообщения: 1
Зарегистрирован: 01 июл 2013, 21:27

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение mad » 21 дек 2013, 11:50

Просьба описать как переделать код урока 106, а именно "Доступ к фрагменту из Activity" под support library

Код: Выделить всё

  public void onClick(View v) {
    Fragment frag1 = getFragmentManager().findFragmentById(R.id.fragment1);
    ((TextView) frag1.getView().findViewById(R.id.textView))
        .setText("Access to Fragment 1 from Activity");

    Fragment frag2 = getFragmentManager().findFragmentById(R.id.fragment2);
    ((TextView) frag2.getView().findViewById(R.id.textView))
        .setText("Access to Fragment 2 from Activity");
  }

apollox
Сообщения: 23
Зарегистрирован: 07 янв 2014, 13:51

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение apollox » 25 мар 2014, 12:59

Такой вопрос, в случае использования PreferenceFragment (public class MyFragments extends PreferenceFragment) я могу использовать вызов getPreferenceManager().

Но если использовать библиотеку Support Library - import android.support.v4.app.Fragment (public class MyFragments extends Fragment), то получаю ошибку:
The method getPreferenceManager() is undefined for the type MyFragments

В чем здесь проблема?

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение klblk » 27 мар 2014, 06:31

проблема в том, что в Support Library нет PreferenceFragment. И вероятно проще будет использовать устаревшую PreferenceActivity.
Или можно почитать: http://developer.android.com/intl/ru/gu ... tings.html и попытаться сделать поддержку для разных версий.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение Mikhail_dev » 27 мар 2014, 08:03

Я очень долго плевался от настроек, что в Андроиде, в конечном счете написал полностью свои. Теперь у меня нереальная гибкость, могу крутить и вертеть как хочу и на любой версии API. Даже Headers можно сделать.
Я писал об этой проблеме тут http://stackoverflow.com/questions/1955 ... agment-etc , но мне таки никто и не ответил.
В большинстве известных приложений, настройки кастомные (гугл не в счет).

apollox
Сообщения: 23
Зарегистрирован: 07 янв 2014, 13:51

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение apollox » 27 мар 2014, 09:33

klblk писал(а):проблема в том, что в Support Library нет PreferenceFragment. И вероятно проще будет использовать устаревшую PreferenceActivity.
Или можно почитать: http://developer.android.com/intl/ru/gu ... tings.html и попытаться сделать поддержку для разных версий.
Понятно, спасибо, я в итоге так и сделал, с проверкой версий:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) - FragmentsActivity
else PreferenceActivity

Persik
Сообщения: 19
Зарегистрирован: 15 май 2014, 08:55

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение Persik » 01 июл 2014, 13:18

Добрый день. Тема о navigation drawer. Я написала все исходники, но почему появляется единст. ошибка .replace. Подскажите как исправить?

Код: Выделить всё

 private void selectItem(int position) {
        // update the main content by replacing fragments
        Fragment fragment = null;
        switch (position) {
        case 0:
            fragment = new HomeFragment();
            break;
        case 1:
            fragment = new PaymentFragment();
            break;
        default:
            break;
        }
 
        if (fragment != null) {
            FragmentManager fragmentManager = getFragmentManager();
            fragmentManager.beginTransaction()
           [color=#BF00BF] .replace[/color](R.id.frame_container, fragment)
            .commit();
 
            // update selected item and title, then close the drawer
            mDrawerList.setItemChecked(position, true);
            mDrawerList.setSelection(position);
            setTitle(navMenuTitles[position]);
            mDrawerLayout.closeDrawer(mDrawerList);
        } else {
            // error in creating fragment
            Log.e("MainActivity", "Error in creating fragment");
        }
    }

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение klblk » 03 июл 2014, 06:07

предполагаю что FragmentManager и Fragment из разных пакетов. Если используете support фрагменты, то FragmentManager нужно получать функцией getSupportFragmentManager(), а активити наследовать от FragmentActivity (или ActionBatActivity если используются support-v7).

а вообще у любой ошибки есть описание.

Ответить