Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Android [игнор отключен] [закрыт для гостей] / прослушать изменение / 6 сообщений из 6, страница 1 из 1
30.09.2019, 07:05
    #39868860
Zafar Z
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
прослушать изменение
День добрый,

Подскажите как я могу отследить изменения в

StudentListTemp.size();


То есть как я могу создать свое событие в Main Activity при изменениях в значении StudentListTemp.size();



Код: 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.
public class ListAdapter extends ArrayAdapter<Student> {



    public ArrayList<Student> MainList;

    public ArrayList<Student> StudentListTemp;

    public ListAdapter.SubjectDataFilter studentDataFilter;

    public ListAdapter(Context context, int id, ArrayList<Student> studentArrayList) {

        super(context, id, studentArrayList);

        this.StudentListTemp = new ArrayList<Student>();

        this.StudentListTemp.addAll(studentArrayList);

        this.MainList = new ArrayList<Student>();

        this.MainList.addAll(studentArrayList);
    }

    @Override
    public Filter getFilter() {

        if (studentDataFilter == null) {

            studentDataFilter = new ListAdapter.SubjectDataFilter();
        }
        return studentDataFilter;
    }


    public class ViewHolder {

        TextView Name;
        TextView Number;
        TextView Qonun;

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ListAdapter.ViewHolder holder = null;

        if (convertView == null) {

            LayoutInflater layoutInflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            convertView = layoutInflater.inflate(R.layout.custom_layout, null);

            holder = new ListAdapter.ViewHolder();

            holder.Name = (TextView) convertView.findViewById(R.id.textviewName);

            holder.Number = (TextView) convertView.findViewById(R.id.textviewPhoneNumber);

            holder.Qonun = (TextView) convertView.findViewById(R.id.textviewQonun);

            convertView.setTag(holder);

        } else {

            holder = (ListAdapter.ViewHolder) convertView.getTag();
        }

        Student student = StudentListTemp.get(position);

        holder.Name.setText(student.getName());

        holder.Number.setText(student.getNumber());

        //holder.Qonun.setText(student.getQonun());

        return convertView;

    }

    private class SubjectDataFilter extends Filter {


        @Override
        protected FilterResults performFiltering(CharSequence charSequence) {

            charSequence = charSequence.toString().toLowerCase();

            FilterResults filterResults = new FilterResults();

            if (charSequence != null && charSequence.toString().length() > 0) {

                ArrayList<Student> arrayList1 = new ArrayList<Student>();

                for (int i = 0, l = MainList.size(); i < l; i++) {
                    Student subject = MainList.get(i);

                    if (subject.toString().toLowerCase().contains(charSequence))

                        arrayList1.add(subject);
                }

                filterResults.count = arrayList1.size();

                filterResults.values = arrayList1;
            } else {
                synchronized (this) {
                    filterResults.values = MainList;

                    filterResults.count = MainList.size();
                }
            }
            return filterResults;
        }




        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence charSequence, FilterResults filterResults) {

            StudentListTemp = (ArrayList<Student>) filterResults.values;

            notifyDataSetChanged();

            clear();

            for (int i = 0, l = StudentListTemp.size(); i < l; i++)
                add(StudentListTemp.get(i));

            notifyDataSetInvalidated();



        }
    }
}

...
Рейтинг: 0 / 0
30.09.2019, 07:55
    #39868866
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
прослушать изменение
Zafar ZТо есть как я могу создать свое событие в Main Activity при изменениях в значении StudentListTemp.size();
Например через Looper javaway.info/mnogopotochnost-v-android-looper-handler-handlerthread-chast-1/

Но для начала стоит разобраться при каких обстоятельствах меняется размер. Возможно подойдет вариант и попроще. Но первый - более верный и в будущем пригодится.
...
Рейтинг: 0 / 0
30.09.2019, 07:57
    #39868867
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
прослушать изменение
Тут можно использовать тэги синтаксиса языка для удобного чтения. Например, выше я сделал тэг java.
...
Рейтинг: 0 / 0
30.09.2019, 08:16
    #39868875
Zafar Z
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
прослушать изменение
wadman,
При каждом обновлении в списке в ListView (через адаптер) меняется количество (size)
...
Рейтинг: 0 / 0
30.09.2019, 08:28
    #39868878
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
прослушать изменение
Zafar Z,

ListView в коде-же меняется? Посмотри методы адаптера notify*. Там и по изменению одной позиции есть, и по списку в целом.
...
Рейтинг: 0 / 0
30.09.2019, 11:40
    #39869015
Zafar Z
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
прослушать изменение
wadman,


Спасибо всем за участие и ответы,
в итоге использовал:

listAdapter.registerDataSetObserver(new DataSetObserver() {

@Override

public void onChanged() {

// мое событие



}

});

Все устраивает.(правда пришлось импортировать import android.database.DataSetObserver;)

Конечно были варианты использовать listAdapter.notifyDataSetChanged(); но не разобрался как правильно его использовать (((
...
Рейтинг: 0 / 0
Форумы / Android [игнор отключен] [закрыт для гостей] / прослушать изменение / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]