Форум программистов, компьютерный форум CyberForum.ru

Android, метод getFilter(), интерфейса Filterable, в Fragment - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Динамическое создание элементов на активити http://www.cyberforum.ru/android-dev/thread1573836.html
Здравствуйте! Возникла проблема динамического создания элементов. К примеру, мне необходимо, чтобы при нажатии на одну кнопку, на активити добавлялась еще одна, и так далее. Т.е. Если я 5 раз кликнул по моей кнопке, то на активити появилось 5 новых кнопок. Может кто-то сталкивался с данной проблемой и уже решил ее. Спасибо.
Android Заряд батареи Это правда что сервисы особенно если выполняют сетевые операции садят батарею?? Просто я хочу создать сервис который будет каждые 30 секунд отправлять TCP запросы на сервер windows, чтобы узнать какую команду выполнять. Также будет отправлять изображения звук и текстовую информацию взависимости от команды и будет неубиваемый. Запись звука, изображений текстовой информации будет также выполнятся в... http://www.cyberforum.ru/android-dev/thread1573415.html
Android ListView с разделителями
Всем привет, такой вопрос: делаю список с разделением по датам, даты в гсоне находятся в разброс, я их сортирую и потом пытаюсь добавить в шапку, но у меня получается так что добавляется все даты, а надо что бы добавлялась только один раз, а потом отображались данные косающиеся этих дат. В общем я написал адаптер который ставит в шапку все, но мне надо как то убрать дубликаты, что бы даты...
Закруглить углы у ImageView Android
Здравствуйте! Подскажите как проще всего закруглить углы у ImageView?, лучше через xml, можно ли это сделать через Material Design, много про него написано, но примеров вразумительного кода так и не нашел(.
Android ListFragment http://www.cyberforum.ru/android-dev/thread1573237.html
В ListFragment выводятся файлы, надо сделать возврат по кнопке "назад" для возврата в папку на уровень выше. Вот код Activity package com.mycompany.mylistfragment; import android.app.*; import android.os.*; import android.view.*; public class MainActivity extends Activity implements SimpleListFragment.OnArticleSelectedListener {
Android RecyclerView + Swipe влево/вправо Пытаюсь сделать на элементах списка возможность их сдвига в стороны, и в зависимости от стороны выполнять разные действия. По принципу как на контактах в телефонной книге - звонок и смс. Никак не могу понять, как реализовать. Может быть есть где-то пример похожий? подробнее

Показать сообщение отдельно
DemD10
58 / 47 / 12
Регистрация: 03.09.2013
Сообщений: 424
08.11.2015, 14:37  [ТС]     Android, метод getFilter(), интерфейса Filterable, в Fragment
Ситуация такая, использую Filterable, во время поиска, сначала использовал Activity, но затем понадобилось использовать фрагмент. Не буду вдаваться в структуру кода, но вызов метода происходит в кастомном адаптере.

Adapter

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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
public class PinnedHeaderAdapter extends BaseAdapter implements OnScrollListener, IPinnedHeader,Filterable {
 
    private static final int TYPE_ITEM = 0;
    private static final int TYPE_SECTION = 1;
 
    private static final int TYPE_MAX_COUNT = TYPE_SECTION + 1;
 
    LayoutInflater mLayoutInflater;
    int mCurrentSectionPosition = 0, mNextSectionPostion = 0;
 
    ArrayList<Integer> mListSectionPos;
 
    ArrayList<String> mListItems;
    ArrayList<String> minfoItems;
    Context mContext;
    private int i = 0;
 
    public PinnedHeaderAdapter(Context context, ArrayList<String> listItems,ArrayList<String> infoItems,ArrayList<Integer> listSectionPos) {
        this.mContext = context;
        this.mListItems = listItems;
        this.mListSectionPos = listSectionPos;
        this.minfoItems = infoItems;
 
        mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
 
    @Override
    public int getCount() {
        return mListItems.size();
    }
 
    @Override
    public boolean areAllItemsEnabled() {
        return false;
    }
 
    @Override
    public boolean isEnabled(int position) {
        return !mListSectionPos.contains(position);
    }
 
    @Override
    public int getViewTypeCount() {
        return TYPE_MAX_COUNT;
    }
 
    @Override
    public int getItemViewType(int position) {
        return mListSectionPos.contains(position) ? TYPE_SECTION : TYPE_ITEM;
    }
 
    @Override
    public Object getItem(int position) {
        return mListItems.get(position);
    }
 
    @Override
    public long getItemId(int position) {
        return mListItems.get(position).hashCode();
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if (convertView == null) {
            holder = new ViewHolder();
            int type = getItemViewType(position);
 
            switch (type) {
            case TYPE_ITEM:
                convertView = mLayoutInflater.inflate(R.layout.row_view, null);
                break;
            case TYPE_SECTION:
                convertView = mLayoutInflater.inflate(R.layout.section_row_view, null);
                break;
            }
            holder.name = (TextView) convertView.findViewById(R.id.row_title);
            holder.info = (TextView) convertView.findViewById(R.id.row_info);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
 
        holder.name.setText(mListItems.get(position).toString());
 
        int type = getItemViewType(position);
 
        switch (type) {
            case TYPE_ITEM:
                holder.info.setText(minfoItems.get(i).toString());
                i = i + 1;
                break;
 
        }
 
        return convertView;
    }
 
    @Override
    public int getPinnedHeaderState(int position) {
        // hide pinned header when items count is zero OR position is less than
        // zero OR
        // there is already a header in list view
        if (getCount() == 0 || position < 0 || mListSectionPos.indexOf(position) != -1) {
            return PINNED_HEADER_GONE;
        }
 
        // the header should get pushed up if the top item shown
        // is the last item in a section for a particular letter.
        mCurrentSectionPosition = getCurrentSectionPosition(position);
        mNextSectionPostion = getNextSectionPosition(mCurrentSectionPosition);
        if (mNextSectionPostion != -1 && position == mNextSectionPostion - 1) {
            return PINNED_HEADER_PUSHED_UP;
        }
 
        return PINNED_HEADER_VISIBLE;
    }
 
    public int getCurrentSectionPosition(int position) {
        String listChar = mListItems.get(position).toString().substring(0, 1).toUpperCase(Locale.getDefault());
        return mListItems.indexOf(listChar);
    }
 
    public int getNextSectionPosition(int currentSectionPosition) {
        int index = mListSectionPos.indexOf(currentSectionPosition);
        if ((index + 1) < mListSectionPos.size()) {
            return mListSectionPos.get(index + 1);
        }
        return mListSectionPos.get(index);
    }
 
    @Override
    public void configurePinnedHeader(View v, int position) {
        // set text in pinned header
        TextView header = (TextView) v;
        mCurrentSectionPosition = getCurrentSectionPosition(position);
        header.setText(mListItems.get(mCurrentSectionPosition));
    }
 
    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {
        if (view instanceof PinnedHeaderListView) {
            ((PinnedHeaderListView) view).configureHeaderView(firstVisibleItem);
        }
    }
 
    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        // TODO Auto-generated method stub
    }
 
    @Override
    public Filter getFilter() {
 
        return ((FragmentSpeciality) mContext).new ListFilter();
    }
 
    public static class ViewHolder {
        public TextView name;
        public TextView info;
    }
 
}
Fragment class

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
 public class ListFilter extends Filter {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            // NOTE: this function is *always* called from a background thread,
            // and
            // not the UI thread.
            String constraintStr = constraint.toString().toLowerCase(Locale.getDefault());
            FilterResults result = new FilterResults();
 
            if (constraint != null && constraint.toString().length() > 0) {
                ArrayList<String> filterItems = new ArrayList<String>();
 
                synchronized (this) {
                    for (String item : mItems) {
                        if (item.toLowerCase(Locale.getDefault()).startsWith(constraintStr)) {
                            filterItems.add(item);
                        }
                    }
                    result.count = filterItems.size();
                    result.values = filterItems;
                }
            } else {
                synchronized (this) {
                    result.count = mItems.size();
                    result.values = mItems;
                }
            }
            return result;
        }
 
        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            ArrayList<String> filtered = (ArrayList<String>) results.values;
            setIndexBarViewVisibility(constraint.toString());
            // sort array and extract sections in background Thread
            new Poplulate().execute(filtered);
        }
 
    }
Показал только часть кода фрагмента, то есть inner class. Проблемный метод :

Java
1
2
3
4
5
@Override
    public Filter getFilter() {
 
        return ((FragmentSpeciality) mContext).new ListFilter();
    }
Думаю, проблема с контекстом, но подставлять его по разному пробовал, помогите пожалуйста.
 
Текущее время: 08:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru