Модераторы: javastic
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> LazyAdapter и поиск в ListView, Не работает поиск в ListView 
:(
    Опции темы
cezer987
  Дата 12.9.2014, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 6.6.2012

Репутация: нет
Всего: нет



Здравствуйте ув. Программисты.

Есть программа с LazyAdapter добавил поиск в программу, но не работает((( 

Все запускается без ошибок, когда ввожу текст ничего не происходит. 
Подскажите что не так сделал, вот код:

MainActivity
Код

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.EditText;
import android.widget.ListView;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import java.util.ArrayList;
import java.util.HashMap;
public class MainActivity extends Activity {

static final String URL = "http://mysite.ru/strings.xml";

static final String KEY_SONG = "song";
static final String KEY_ID = "id";
static final String KEY_TITLE = "title";
static final String KEY_ARTIST = "artist";
static final String KEY_DURATION = "duration";
static final String KEY_THUMB_URL = "thumb_url";

ListView list;
                LazyAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
  XMLParser parser = new XMLParser();
  String xml = parser.getXmlFromUrl(URL);
  Document doc = parser.getDomElement(xml);

  NodeList nl = doc.getElementsByTagName(KEY_SONG);
  for (int i = 0; i < nl.getLength(); i++) {

   HashMap<String, String> map = new HashMap<String, String>();
   Element e = (Element) nl.item(i);

   map.put(KEY_ID, parser.getValue(e, KEY_ID));
   map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE));
   map.put(KEY_ARTIST, parser.getValue(e, KEY_ARTIST));
   map.put(KEY_DURATION, parser.getValue(e, KEY_DURATION));
   map.put(KEY_THUMB_URL, parser.getValue(e, KEY_THUMB_URL));
  
   songsList.add(map);
  }

  list=(ListView)findViewById(R.id.list);
                adapter=new LazyAdapter(this, songsList);         
                list.setAdapter(adapter);
                list.setTextFilterEnabled(true);
                EditText editTxt = (EditText) findViewById(R.id.inputSearch);
  
                list.setOnItemClickListener(new OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> parent, View view,
         int position, long id) {         
   }
  });
                editTxt.addTextChangedListener(new TextWatcher() {
                        @Override
                        public void onTextChanged(CharSequence s, int start, int before, int count) {
                                if (count < before) {
                                 adapter.resetData();
                                }
                                 adapter.getFilter().filter(s.toString());
                        }
                        @Override
                        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                        }
                        @Override
                        public void afterTextChanged(Editable s) {
                        }
                });

}
}


LazyAdapter

Код

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class LazyAdapter extends BaseAdapter implements Filterable {
  
        private Activity activity;
        private ArrayList<HashMap<String, String>> data;
        private ArrayList<HashMap<String, String>> origlistData;
        private Filter adrFilter;
        private static LayoutInflater inflater=null;
        public ImageLoader imageLoader;
  
        public LazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
                activity = a;
                data=d;
                origlistData=d;
                inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                imageLoader=new ImageLoader(activity.getApplicationContext());
        }
        public int getCount() {
                return data.size();
        }
        public Object getItem(int position) {
                return position;
        }
        public long getItemId(int position) {
                return position;
        }
  
        public View getView(int position, View convertView, ViewGroup parent) {
                View vi=convertView;
                if(convertView==null)
                        vi = inflater.inflate(R.layout.list_row, null);
                TextView title = (TextView)vi.findViewById(R.id.title);
                TextView artist = (TextView)vi.findViewById(R.id.artist);
                TextView duration = (TextView)vi.findViewById(R.id.duration);
                ImageView thumb_image=(ImageView)vi.findViewById(R.id.thumbnail);
          
                HashMap<String, String> song = new HashMap<String, String>();
                song = data.get(position);
          
          
                title.setText(song.get(MainActivity.KEY_TITLE));
                artist.setText(song.get(MainActivity.KEY_ARTIST));
                duration.setText(song.get(MainActivity.KEY_DURATION));
                imageLoader.DisplayImage(song.get(MainActivity.KEY_THUMB_URL), thumb_image);
                return vi;
        }
        public void resetData() {
                data  = origlistData;
        }

        @Override
        public Filter getFilter() {
                if(adrFilter == null)
                        adrFilter = new ADRFilter();
                return adrFilter;
        }
        private class ADRFilter extends Filter {
                @Override
                protected FilterResults performFiltering(CharSequence constraint) {
                                FilterResults results = new FilterResults();
                                if(constraint == null || constraint.length() == 0)
                                {
                                        results.values = origlistData;
                                        results.count = origlistData.size();
                                }
                                else
                                {
                                        ArrayList<HashMap<String, String>> filterResultsData = new ArrayList<HashMap<String,String>>();
                                        for(Map<String, String> p : data)
                                        {
                                                if(p.get("item_clear").equals(constraint))
                                                {
                                                        filterResultsData.add((HashMap<String, String>) p);
                                                }
                                        }
                                        results.values = filterResultsData;
                                        results.count = filterResultsData.size();
                                  
                                }
                                return results;
                        }
                        @Override
                        protected void publishResults(CharSequence charSequence, FilterResults filterResults)
                        {
                                if (filterResults.count == 0)
                                        notifyDataSetInvalidated();
                                else {
                                        data = (ArrayList<HashMap<String, String>>) filterResults.values;
                                        notifyDataSetChanged();
                                }

                        }
                }
        }


Всем заранее спасибо!!!
PM   Вверх
cezer987
Дата 12.9.2014, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 6.6.2012

Репутация: нет
Всего: нет



В системных логах когда печатаю текст пишет: 
 W/Filter﹕ An exception occured during performFiltering()!
    java.lang.NullPointerException
PM   Вверх
cezer987
Дата 12.9.2014, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 6.6.2012

Репутация: нет
Всего: нет



[OFFTOP]
Город засыпает, Программисты просыпаются!!!  smile 
[/OFFTOP]
PM   Вверх
igorka
Дата 12.9.2014, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 28.6.2007

Репутация: нет
Всего: нет



Ну чем тебе помочь то... 
Добавь логи, пройдись дебагером, найди место, на котором падает.
PM MAIL   Вверх
cezer987
Дата 12.9.2014, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 6.6.2012

Репутация: нет
Всего: нет



Цитата(igorka @ 12.9.2014,  11:34)
Ну чем тебе помочь то... 
Добавь логи, пройдись дебагером, найди место, на котором падает.

Да вот в том то и дело что приложение не падает))) Все работает отображает но когда пишу текст он ничего не выводит как были те же картинки с подписями так же и остались((((
PM   Вверх
Felan
Дата 12.9.2014, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 2.8.2007
Где: Самара

Репутация: нет
Всего: 7



Да просто лень всем заниматься очередной лабораторкой.

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


--------------------
// Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного.
PM MAIL WWW ICQ   Вверх
cezer987
Дата 12.9.2014, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 6.6.2012

Репутация: нет
Всего: нет



Цитата(Felan @ 12.9.2014,  12:45)
Да просто лень всем заниматься очередной лабораторкой.

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

Разобрался на половину сейчас ищу как из HashMap мне выдернуть то что мне нужно сейчас переменная data хранит:

  [{thumb_url=http://mysite.ru/2.jpg, id=1, duration= 12 Sep 2014
00:00, title=Текст 1, artist=Текст 2}, и так далее

при поиске мне нужно проходиться по ключу title/

Но в цикле:

Код

for (HashMap<String, String> p : s) {                        
                        if(p.containsValue(constraint.toString().toUpperCase())){
                            nData.add(p);
                        }

у него не получается найти то что мне нужно(((

Добавлено через 3 минуты
Цитата(Felan @ 12.9.2014,  12:45)
Да просто лень всем заниматься очередной лабораторкой.

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

Вот весь GetFilter

Код

  @Override
    public Filter getFilter() {
        return new Filter() {

            @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {





            }

            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                FilterResults results = new FilterResults();
                // We implement here the filter logic
/*
                Log.d(TAG, "data^ "+ data);*/

                if (constraint == null || constraint.length() == 0) {
                    // No filter implemented we return all the list
                    results.values = data;
                    results.count = data.size();
                }
                else {
                    // We perform filtering operation
                    ArrayList<HashMap<String, String>> s =  data;
                    ArrayList<HashMap<String, String>> nData = new ArrayList<HashMap<String,String>>();

                    for (HashMap<String, String> p : s) {
                        Log.d(TAG, "Result.Values "+p.containsValue(constraint.toString().toUpperCase()));
                        if(p.containsValue(constraint.toString().toUpperCase())){

                            nData.add(p);
                        }
                    }

                    results.values = nData;
                    results.count = nData.size();
                  /*  Log.d(TAG, "Result.Values"+ results.values);
                    Log.d(TAG, "Result.Count"+ results.count);*/

                }
                return results;
            }
        };
    }

PM   Вверх
Felan
Дата 15.9.2014, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 2.8.2007
Где: Самара

Репутация: нет
Всего: 7



Цитата(cezer987 @  12.9.2014,  14:48 Найти цитируемый пост)
Вот весь GetFilter


На данном этапе твоя проблема решается дебаггером, гуглом и желанием ей заняться. Причем элементарно, потому, что документации о фильтрации адаптеров море.

А ув. программистам, писать за тебя код откровенно лень smile

Ну могу за тебя погуглить чуток

Вот, например.

Ну или вот  на русском, если уж даже с английским плохо.

Это сообщение отредактировал(а) Felan - 15.9.2014, 12:27


--------------------
// Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного.
PM MAIL WWW ICQ   Вверх
cezer987
Дата 15.9.2014, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 6.6.2012

Репутация: нет
Всего: нет



На самом деле вопрос уже решён. Спасибо всем. В особенности Google ))))
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Android | Следующая тема »


 




[ Время генерации скрипта: 0.0715 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.