Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Использование разделителя в RecycleView

Ув. программисты, подскажите, пожалуйста, как решить следующую проблему:
Имеется 8 итемов в райсикалфью (размер List равен 7 соответственно):
Имена
Василий
Александр
Николай
Фамилии
Иванов
Петров
Сидоров

Мне необходимо добавить разделитель между каждой из позиций в RecycleView, но только между именами и фамилиями, то есть выборочно.
При использовании...
Java
1
mRecyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
...делятся все строки подряд.
Примерно осознаю, что надо как-то кастомно юзать DividerItemDecoration, но я не знаю как, ибо новичок.
Помогите, пожалуйста!
Ответ:
Сообщение от Elkatib
У меня два холдера, в одном ИМЕНА и ФАМИЛИИ, а в другом соответственно высвечиваются данные.
Я бы порекомендовал повнимательнее прочитать, что написал Pablito. Плюс к этому можно сделать третий холдер без полосы для самого нижнего элемента.
Вопрос: Обновление RecycleView

Всем привет.
Подскажите пожалуйста каким образом можно обновить RecycleView, оставаясь на одном и том же фрагменте?
Есть viewPager с 4-мя фрагментами, на одном из фрагментов список итемов, который заполняет recylerView. Проблема в том, что когда я нажимаю кнопку, то фрагмент со списком должен дополниться, то есть recylerview должен перерисоваться. На данный момент нажимаю кнопку и ничего происходит, пока не пролистаю на 3-й фрагмент и не вернусь обратно.
Есть идея при нажатии на кнопку заново проставлять recycleview.setAdapter(adapter), в этом случае всё работает. Может есть другое решение или оптимально будет и так?
Ответ: У меня до этого был метод, который отвечал за обновление адаптера, в котором подкидывались данные и вызывался notifyDataSetChanged(), а сам адаптер инициализировался в onCreateView(), но из за того что у меня данные берутся из БД в asyncTask, то адаптер не успевал инициализироваться и выбрасывал NPE. Я решил перенести инициализацию адаптера в метод обновления адаптера из за чего получилась проблема с обновлением recyclerView, тогда я сделал recyclerView.getAdapter().notifyDataSetChanged() и заработало. Потом я подумал, что это как то не клёво и вернул инициализацию в OnCreateView, а в asyncTask добавил Thread.sleep (пока не решил как лучше сделать) и теперь в методе обновления просто вызываю notifyDataSetChanged у одного и того же адаптера.
Вопрос: SlidingTab - фрагменты с RecycleView (ListView)

Здравствуйте, уважаемые разработчики. Из хочу сделать так, что бы на каждой странице были разные RecycleView или ListView (например списки с темами). Там сказано, что фрагмент может быть один или несколько. Вопрос в том, как сделать так, чтобы к каждому "табу" был прикреплен один фрагмент. Спасибо.
Ответ: KaHucTpa_Yoda, я это в активити пишу.
Вопрос: RecycleView

Добрый времени суток!
Есть такое задание: написать ленту гифок, да так, чтобы гифки, которые видно лишь наполовину и меньше останавливались.

Базовый функционал я уже реализовал с помощью glide и recycleView. Но не могу понять, как отследить положение гифки на экране? Как понять, когда мне останавливать ее?

И не очень понимаю как работать правда с glide, может у кого был опыт? Как мне влиять на поведение этой самой гифки, остановить там, или возобновить?

Буду благодарен за наводки в нужном направлении.
Ответ:
Сообщение от Zanexess
а есть какой-то классический способ отслеживать не полное отображение, а наполовину, или в другом отношении?
Можно в том же onScrollListener'e
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
if (recyclerView.getChildCount() == 0) return;//Чтобы не вылетало, если список пустой.
View child = recyclerView.getChildAt(0);
int childHeight = child.getHeight();
int childTop = child.getTop();
int parentTop = recyclerView.getTop();
 
int visibleHeight = childHeight - (parentTop - childTop);
 
float visiblePercent = (float) visibleHeight / (float) childHeight;//Это будет процент вьюшки, который реально видно
Тут расчет только для вертикального скролла и для верхней вьюшки, под остальные по аналогии не сложно переделать.
Вопрос: Как получить приблизительное местоположение пользователя без использования сервисов Google?

Добрый день,

Никак не могу войти под старым ником, поэтому вновь зарегистрировался.

Возник вопрос о геолокации. Суть в следующем. Каким образом можно получать приблизительное местоположение пользователя приложения без использования сервисов Гугла и без запроса разрешений в манифесте? "Приблизительно" - это в масштабе субъекта федерации. Т.е. меня интересует находится ли пользователь в Москве или во Владивостоке, без детализации.
Ответ: zoleg, ты о чём вообще? ТС хочет:
Сообщение от alexvp1
получать приблизительное местоположение пользователя приложения без использования сервисов Гугла и без запроса разрешений в манифесте
Вопрос: Нет метода addOnScrollListener в RecycleView

В чем может быть проблема? setOnScrollListener есть, а addOnScrollListener нету.

Если что, в Gradle подключал:
Java
1
compile 'com.android.support:recyclerview-v7:21.0.+'
Ответ:
Сообщение от amasaemi
setOnScrollListener есть, а addOnScrollListener нету.
попробуйте более новую версию RecycleView:
XML
1
compile 'com.android.support:recyclerview-v7:23.3.0'
Вопрос: Обработка нажатий на элементах списка Recycleview

Здравствуйте!
Впервые пытаюсь создать список с возможностью нажатия на элементах списка. При нажатии на элементы происходят переходы в другие фрагменты.

Код фрагмента, где реализую Recycleview и холдер
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
public class MainMenuFragment extends android.support.v4.app.Fragment {
 
    public RecyclerView mRecyclerView;
    public MainMenuAdapter menuAdapter;
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
 
        View v = inflater.inflate(R.layout.fragment_main_menu_fragment, container, false);
 
        mRecyclerView = (RecyclerView) v.findViewById(R.id.main_menu_fragment);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            mRecyclerView.setLayoutManager(new GridLayoutManager(this.getContext(), 2));
        }
 
        final MainActivity currentActivity = (MainActivity) getActivity();
 
        OptionElementList optionElementList = new OptionElementList(getActivity());
        List<OptionElement> optionElement = optionElementList.getOptionElement();
 
        MainMenuAdapter.OnUserClickListener mOnUserClickListener = new MainMenuAdapter.OnUserClickListener() {
            @Override
            public void onUserClick(OptionElement optionElement) {
 
 
                if (optionElement.getTitle().equals("Значение 2")) {
                    currentActivity.ShowListOfDirectionsFragment();
                }
            }
        };
 
        MainMenuAdapter mMainMenuAdapter = new MainMenuAdapter(mOnUserClickListener);
        mRecyclerView.setAdapter(mMainMenuAdapter);
 
        menuAdapter = new MainMenuAdapter(optionElement);
        mRecyclerView.setAdapter(menuAdapter);
 
 
        return v;
    }
 
 
    public static class MainMenuHolder extends RecyclerView.ViewHolder {
 
        TextView TitleOfMenuPoint;
        OptionElementList mOptionElementList;
 
 
        public MainMenuHolder(View itemView) {
            super(itemView);
 
            TitleOfMenuPoint = (TextView) itemView.findViewById(R.id.title_of_main_menu_point);
 
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
 
                    List<OptionElement> optionElement = mOptionElementList.get(getLayoutPosition());
                    MainMenuAdapter.OnUserClickListener.onUserClick(optionElement);
                }
            });
        }
    }
 
 
    public class OptionElement {
        String title;
 
        OptionElement(String title) {
            this.title = title;
        }
 
        public String getTitle() {
            return title;
        }
 
    }
 
    public class OptionElementList {
 
        private List<OptionElement> mOptionElements;
 
        private OptionElementList(Context context) {
            mOptionElements = new ArrayList<>();
        }
 
        public List<OptionElement> getOptionElement() {
 
            for (int i = 0; i < 100; i++) {
 
                mOptionElements.add(new OptionElement("Значение 1"));
                mOptionElements.add(new OptionElement("Значение 2"));
                mOptionElements.add(new OptionElement("Значение 3"));
                mOptionElements.add(new OptionElement("Значение 4"));
                mOptionElements.add(new OptionElement("Значение 5"));
                mOptionElements.add(new OptionElement("Значение 6"));
            }
 
            return mOptionElements;
        }
 
        public List<OptionElement> get(int layoutPosition) {
            return null;
        }
    }
 
}
Код адаптера
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public class MainMenuAdapter extends RecyclerView.Adapter<MainMenuFragment.MainMenuHolder> {
 
    OnUserClickListener mOnUserClickListener;
 
    public MainMenuAdapter(OnUserClickListener mOnUserClickListener) {
        this.mOnUserClickListener=mOnUserClickListener;
    }
 
    public interface OnUserClickListener {
        void onUserClick(MainMenuFragment.OptionElement optionElement);
    }
 
    List<MainMenuFragment.OptionElement> mOptionElement;
 
    public MainMenuAdapter(List<MainMenuFragment.OptionElement> optionElements) {
        mOptionElement = optionElements;
    }
 
    public MainMenuFragment.MainMenuHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
        View view = layoutInflater.inflate(R.layout.menu_point, parent, false);
 
        GridLayoutManager.LayoutParams params = (GridLayoutManager.LayoutParams) view.getLayoutParams();
        params.height = 350;
        params.width = 350;
        params.getSpanSize();
 
        view.setLayoutParams(params);
 
 
        return new MainMenuFragment.MainMenuHolder(view);
    }
 
    public void onBindViewHolder(MainMenuFragment.MainMenuHolder menuHolder, int position) {
        menuHolder.TitleOfMenuPoint.setText((mOptionElement.get(position)).getTitle());
 
        Log.d("Testing", "Checkpoint 1");
    }
 
    public int getItemCount() {
 
        return  mOptionElement == null ? 0 : mOptionElement.size();
    }
}
Проблема в том, что в холдере подчеркивает onUserClick в строке MainMenuAdapter.OnUserClickListener.onUserClick(optionElement) и пишет, что не может реализовать нестатический метод в статическом контексте. Я это понимаю, но не понимаю, как изменить код, чтобы работало...
Ответ: VASSUV, ну почему же проигнорировал. Ваш совет как раз стал решающим для написания работающего кода.
Только по части имплементации интерфейса во фрагменте - да, это пока не задействовал.
Если настаиваете, сделаю - не совсем понял, правда, чем плохо имплементировать
Вопрос: Как заменить запятую на пробелы при использовании “MultiAutoCompleteTextView”?

Делаю приложение, в нем есть ЕдитВив в который вводится текст. Если на каком то этапе было введено "#" нужно вывести дропдаун с вариантами с АrrayList, при выборе варианта должно в ЕдитТекст добавляться слово (пример строки "Привет Вася я пришел #радость угощай меня печеньем").
Нашел метод, с этими подстроками "MultiAutoCompleteTextView", но во всех примерах используется встроенный разделитель на основе запятой CommaTokenizer(), а нормальных статей с его изменением или переопределением нету(либо я не нашел).
Нашел такую, . Но что то у меня не выходит...
Ищу уже 2 дня, помогите плз кто знает или работал с таким.
Заранее спасибо за ответы!
Ответ: Просто замена не пойдет! Я то символы поменяю, но чтоб пользователь увидел список подсказок -ему надо ввести "," а потом сам текст, после выбора какого то пункта появится еще одна кома после него. А в моем случае ему надо ввести "#" потом увидит все варианты, выберет и после него должен быть " ".
Короче варианты должны выделятся пробелами, а выдача списка только после символа решетки.
Вопрос: Добавить разделитель в список дат

Помогите пожалуйста, есть список с именами и датами, сортированы по датам. Хочу добавить разделители типа MM/yyyy, а какую сторону копать?
Ответ: Спасибо большое, сделал)
Вопрос: Like Button с использованием VK API

Добрый день всем!

Проблема в том что натыкаюсь на куча статей с использованием facebook api для реализации кнопки лайк на экране приложения, у меня возник вопрос, возможно ли создать такую же кнопку лайк но уже с использованием VKontakte api
т.е. привязка уже идет не к facebook а к VKontakte!? Заранее спасибо!
Ответ: Это SDK для того чтобы внедрить соц. сеть VK в приложение которое я создаю, я натыкался на эту статью, в ней ни чего не сказано как можно внедрить кнопку лайк в мое приложение, к примеру в Facebook SDK есть готовые методы (возможно называют их не методами) LikeView которая и есть кнопка лайк, т.е. нет той гибкости которая в Facebook SDK. В общем это мои возмущения, наверное они напрасны потому что в разработчиках андроид приложений я недавно и многое еще не знаю, поэтому я обратился именно сюда. Буду очень рад если кто знает что ни будь по этому поводу.