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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
disx
18 / 18 / 0
Регистрация: 26.02.2014
Сообщений: 501
#1

Как вывести в ListView, только если тело SMS содержит определенный текст? - Android

14.12.2015, 15:35. Просмотров 361. Ответов 13
Метки нет (Все метки)

нужно чтобы в ListView выводились только тела тех сообщений в которых есть определенный текст.

сейчас есть вот такой рабочий код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
listView = (ListView) view.findViewById(R.id.listViewSMS);
       
        // Create Inbox box URI
        Uri inboxURI = Uri.parse("content://sms/inbox");
 
        // List required columns
        String[] reqCols = new String[] { "_id", "body" };
 
        // Get Content Resolver object, which will deal with Content Provider
        ContentResolver cr = getActivity().getContentResolver();
 
        // Fetch Inbox SMS Message from Built-in Content Provider
        Cursor c = cr.query(inboxURI, reqCols, null, null, null);
  
            adapter = new SimpleCursorAdapter(getActivity(), android.R.layout.simple_list_item_1, c,
                    new String[] {"body"}, new int[] {
                    android.R.id.text1, 0 }); /*, "address"*/
            listView.setAdapter(adapter);

как можно это сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2015, 15:35     Как вывести в ListView, только если тело SMS содержит определенный текст?
Посмотрите здесь:

Android Как получить доступ к тексту SMS?
Android Как вывести текст айтема в ListView?
Android Как выводить текст используя ListView
SimpleCursorAdapter(ListView заполняется данными только после прокрутки скрола) Android
Получать текст входящих sms-сообщений от определённого номера и использовать этот текст в своей программе Android
Как сделать, чтобы кнопка добавлялась не в каждую строку ListView, а только в самый низ? Android
Android Получить текст из одного TextView в кастомном ListView
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Паблито
2240 / 1813 / 564
Регистрация: 12.05.2014
Сообщений: 6,456
Завершенные тесты: 1
14.12.2015, 15:40     Как вывести в ListView, только если тело SMS содержит определенный текст? #2
- удалить из массива те, которые не содержат текст (например скопировать из массива в Arraylist с проверкой)
- сделать notifyDatasetChanged();
- PROFIT
disx
18 / 18 / 0
Регистрация: 26.02.2014
Сообщений: 501
14.12.2015, 15:54  [ТС]     Как вывести в ListView, только если тело SMS содержит определенный текст? #3
Паблито,
(например скопировать из массива в Arraylist с проверкой)
а можно чуть подробнее?
Паблито
14.12.2015, 16:03
  #4

Не по теме:

ах нет, тут такое не прокатит, пардон

disx
18 / 18 / 0
Регистрация: 26.02.2014
Сообщений: 501
15.12.2015, 17:11  [ТС]     Как вывести в ListView, только если тело SMS содержит определенный текст? #5
оказалось просто, но долго :

Java
1
2
3
4
5
6
7
8
9
10
 
String filter= "искомое слово";
String searchQuery = "body like '%" + filter + "%'";
        Cursor c   = null;
        c = getActivity().getContentResolver().query(
                Uri.parse("content://sms/inbox"),
                reqCols,
                searchQuery,
                null,
                null);
Добавлено через 56 минут
получаю дату SMS а она там в таком формате long = 123456786545

как ее можно получить и сразу перевести в нормальную, чтоб передать в массив адаптера?

в адаптере сейчас так:
Java
1
2
3
adapter = new SimpleCursorAdapter(getActivity(), android.R.layout.simple_list_item_2, c,
                    new String[] {"body", "data"}, new int[] {
                    android.R.id.text1, android.R.id.text2 });
Подскажите пожалуйста кто знает?

Добавлено через 6 часов 57 минут
Ну хоть бы общую идейку, как это делают
Spelcrawler
525 / 495 / 111
Регистрация: 12.03.2014
Сообщений: 1,647
Завершенные тесты: 1
15.12.2015, 18:02     Как вывести в ListView, только если тело SMS содержит определенный текст? #6
disx, примерно так.
lostandleft
2 / 2 / 1
Регистрация: 04.12.2015
Сообщений: 96
15.12.2015, 19:54     Как вывести в ListView, только если тело SMS содержит определенный текст? #7
Цитата Сообщение от disx Посмотреть сообщение
получаю дату SMS а она там в таком формате long = 123456786545
как ее можно получить и сразу перевести в нормальную, чтоб передать в массив адаптера?
Нагуглил.
Посмотри все различные варианты решения твоей задачи, их несколько какой будет ближе.
ОЧЕНЬ РАЗЖЕВАНО и конкретно, ты разберешся
disx
18 / 18 / 0
Регистрация: 26.02.2014
Сообщений: 501
16.12.2015, 08:33  [ТС]     Как вывести в ListView, только если тело SMS содержит определенный текст? #8
Spelcrawler, lostandleft, спасибы огромные , но основная сложность в том как передать в массив адаптера вместо "data" правильное время... это как-то отдельный запрос курсором делать и создавать новый массив для переведенных дат, или можно что подкрутить к моему изначальному примеру ?
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
16.12.2015, 09:39     Как вывести в ListView, только если тело SMS содержит определенный текст? #9
Цитата Сообщение от disx Посмотреть сообщение
как передать в массив адаптера вместо "data" правильное время
Calendar
Spelcrawler
525 / 495 / 111
Регистрация: 12.03.2014
Сообщений: 1,647
Завершенные тесты: 1
16.12.2015, 09:41     Как вывести в ListView, только если тело SMS содержит определенный текст? #10
disx, в данном случае cursorAdapter не подойдет, нужен свой кастомный адаптер и лучше использовать RecyclerView - он удобнее и проще.
disx
18 / 18 / 0
Регистрация: 26.02.2014
Сообщений: 501
17.12.2015, 08:58  [ТС]     Как вывести в ListView, только если тело SMS содержит определенный текст? #11
Armagedo,
Calendar
никогда не работал с этим пока а посему не врубаюС, буду разбираться...

Spelcrawler, (не спрашиваю как это делать ), но где лучше делать запрос курсором и преобразование в человекопонятную дату в файле DialogFragment с листом, или в RecyclerАдаптере?

и вообще почему cursorAdapter в моем случае не подойдет ?
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
17.12.2015, 09:30     Как вывести в ListView, только если тело SMS содержит определенный текст? #12
Цитата Сообщение от disx Посмотреть сообщение
никогда не работал с этим пока
Ну, придётся, поскольку это класс работы с датой/временем и даже, возможно, единственный на данный момент.

Цитата Сообщение от disx Посмотреть сообщение
и вообще почему cursorAdapter в моем случае не подойдет
В принципе, можешь переписать и для него метод getView, в котором произведешь манипуляции с полем типа "дата".
Но это равносильно написанию своего собственного адаптера, о чем и упомянул Spelcrawler...
Spelcrawler
525 / 495 / 111
Регистрация: 12.03.2014
Сообщений: 1,647
Завершенные тесты: 1
17.12.2015, 10:04     Как вывести в ListView, только если тело SMS содержит определенный текст? #13
disx, по идее не важно где это будет сделано, главное чтобы не в методах, которые элементы списка заполняют иначе будет очень много запросов к бд и все будет тормозить. Я обычно посылаю все нужные данные в удобном виде в конструктор адаптера, редко когда в самом адаптере данные получаю или преобразовываю.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2016, 15:32     Как вывести в ListView, только если тело SMS содержит определенный текст?
Еще ссылки по теме:

Android Получить текст из ListView
В ListView не получается нормально вывести текст Android
Android Если LISTView Пуст
Android Получить текст из SMS
Как вывести текст? Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
disx
18 / 18 / 0
Регистрация: 26.02.2014
Сообщений: 501
11.01.2016, 15:32  [ТС]     Как вывести в ListView, только если тело SMS содержит определенный текст? #14
Spelcrawler, да проще простого, полистал предыдущие твои советы:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public List<ItemData> getItemsFromCursor(Cursor cursor){
        List<ItemData> items = new ArrayList<>();
        while(cursor.moveToNext()){
            DateFormat df = new SimpleDateFormat("dd:MM:yyyy");
            String date = cursor.getString(cursor.getColumnIndex("date"));
            String title = cursor.getString(cursor.getColumnIndex("body"));
            long getDate = Long.valueOf(date);
            Date currentDate = new Date(getDate);
            date = String.valueOf(df.format(currentDate));
            items.add(new ItemData(date, title));
        }
 
        return items;
    }
вопрос решен, всем спасибо!
Yandex
Объявления
11.01.2016, 15:32     Как вывести в ListView, только если тело SMS содержит определенный текст?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru