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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
metroten
0 / 0 / 0
Регистрация: 14.05.2013
Сообщений: 29
#1

Position в ListView после addTextChangedListener - Программирование Android

10.04.2014, 14:43. Просмотров 1191. Ответов 6
Метки нет (Все метки)

ПРивет! в чем соль... у меня ListView с определенными item, при клике на них, появляется окно с определенной информацией. какую именно информацию отображать я определяю так: я передаю позицию кнопки на которую нажали и по этому числу уже соответственно показываю нужный текст. Теперь мне нужно добавить поиск по этим item. Я добавил EditText и сам поиск я реализую через addTextChangedListener. Но проблема в том что после набора текста в EditText, содержимое LIstView меняется и меняются позиции элементов. Т.е. если элемент который я ищу стоял на 8м месте, и после поиска становится 1м, у меня передается цифра 1 вместо 8 и отображается совсем не та информация.... помогите пожалуйста!

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
package com.example.directory;
 
import java.util.ArrayList;
import java.util.HashMap;
 
import android.app.Activity;
import android.content.ClipData.Item;
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.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
 
public class ThemesActivity extends Activity{
    
    ArrayAdapter<String> adapter;
    ArrayList<HashMap<String,String>> themesList;
    EditText inputSearch;
    ListView lvThemes;
    String flag;
    String list0[]={
            "Abc",
            "Qwe",
            "Asd",
            "Zxc",
            "Dfg",
            "Ert",
            "Hrd",
    };
    
    String list1[]={
            "123",
            "234",
            "345",
            "456",
            "567",
            "678",
    };
    
    @Override
    public void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.themes);
        
        //requestWindowFeature(Window.FEATURE_NO_TITLE);
                
        lvThemes=(ListView) findViewById (R.id.lvThemes);
        inputSearch=(EditText) findViewById(R.id.inputSearch);
        Bundle bundle = getIntent().getExtras();
        int itemname = Integer.parseInt(bundle.getString("defStrID"));
        flag=bundle.getString("defStrID");
        
        
        switch (itemname)
        {
        case 0:
            adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list0);
            //lvThemes.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list0));
            break;
        case 1:
            adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list1);
            //lvThemes.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list1));
            break;
        default:
            break;
        }
        
        lvThemes.setAdapter(adapter);   
    
    inputSearch.addTextChangedListener(new TextWatcher() {
         
        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
            // Когда, юзер изменяет текст он работает
            //ThemesActivity.this.adapter.getFilter().filter(cs);
        }
         
        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                int arg3) {
            // TODO Auto-generated method stub
             
        }
         
        @Override
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub                          
        }
    });
    
    
    lvThemes.setOnItemClickListener(new OnItemClickListener()
    {
        public void onItemClick(AdapterView<?> a, View v, int position, long id)
        {
            String itemname2=new Integer(position).toString();
            flag=flag+itemname2;
            Intent intent=new Intent();
            intent.setClass(ThemesActivity.this, ViewActivity.class);
            Bundle b=new Bundle();
            b.putString("defStrID", flag);
            intent.putExtras(b);
            startActivity(intent);
            
        }
    });
    
    
}
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.04.2014, 14:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Position в ListView после addTextChangedListener (Программирование Android):

android Listview Center position - Программирование Android
здравствуйте У меня есть XML-файл с разобрать и показать элементы в ListView. ListView включены изображения и текст (к примеру, Эминем...

Сохранение position элемента ListView при поиске - Программирование Android
Если можно подробно описать и показать пример кода не посредственно показывающего сохранение позиции конкретного элемента ListView. т.к....

ListView. После добавления кнопки перестал быть доступен сам ListView - Программирование Android
Кастомизировал ListView с помощью нескольких TextView. Но после того, как добавил ImageButton сам список стал недоступен для клика, а...

Не могу передать контекст фрагмента в addTextChangedListener - Программирование Android
Сначала код был в Activity - все работало. Перенес во Fragment - перестало работать. Подчеркивает this в этой строке:...

Загрузка ListView после AsyncTask - Программирование Android
В классе, который расшияет AsyncTask, занружаю данные из JSON и сохраняю в бд. При первом запуске апликации, список не выдаёт какого либо...

Обновление ListView после добавления записи - Программирование Android
Выбираю записи из БД и вывожу их в ListView. В этом же активити есть кнопка добавления записи в БД. После добавления я хочу что б эта...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
kirawa
33 / 33 / 1
Регистрация: 12.11.2013
Сообщений: 336
10.04.2014, 15:46 #2
Я сделал вот, пришлось очень хорошо подумать, и вам советую
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
_id = null;
        position = 0;
 
        Bundle bundle = getIntent().getExtras();
        if (bundle != null && CustomAdapter.allItems != null){
            _id = bundle.getLong(DBaseAdapter.KEY_ID);
            //сравниваем коллекцию со всеми итемами и отфильтрованными поиском
            if (CustomAdapter.allItems.size() != MainActivity.listView.getAdapter().getCount()){
                for (int i = 0; i < CustomAdapter.allItems.size(); i ++ ){
                    //сравнение id из коллекции со всеми итемами и id выбранного итема
                    if (CustomAdapter.allItems.get(i).getId() == bundle.getLong(DBaseAdapter.KEY_ID)){
                        // i == позиции епты
                        position = i;
                        populateFields(position);
                    }
                }
            }else {
                position = bundle.getInt(MainActivity.POSITION);
                populateFields(position);
            }
        }
1
metroten
0 / 0 / 0
Регистрация: 14.05.2013
Сообщений: 29
10.04.2014, 16:53  [ТС] #3
kirawa, скажи пожалуйста а куда вставлять этот код? я просто совсем новичок в этом, не давно сел за изучение android
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
11.04.2014, 14:38 #4
metroten, так у вас первая активность теряется после вызова второй, может поэтому?
0
Gomez99
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 13
02.06.2014, 12:32 #5
kirawa, Скажи как сделать очень нужно, как внедрить код. Покажи мастер класс. Никак не могу сделать.

Добавлено через 37 секунд
Если можно подробно описать и показать пример кода не посредственно показывающего сохранение позиции конкретного элемента ListView. т.к. при поиске через Edit фильтруется и находится нужный элемент, но его позиция постоянно равняется нулю из-за чего не возможно перейти на нужный материал в списке. Постоянно открывает первый элемент списка.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
lv1.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> a, View v, int position, long id) {
 
//Позиция элемента, по которому кликнули
String itemname = new Integer(position).toString);
//Создаем новый intent
Intent intent = new Intent();
intent.setClass(FirstActivity.this, ViewActivity.class);
Bundle b = new Bundle();
b.putString("defStrID", itemname); //defStrID - уникальная строка, отправим itemname в другое Activity
intent.putExtras(b);
startActivity(intent); //запускаем intent
}
});
пример можете отправить мне на почту [email] Буду благодарен.
0
kirawa
33 / 33 / 1
Регистрация: 12.11.2013
Сообщений: 336
02.06.2014, 14:08 #6
охохо

Если размер коллекции со всеми итемами != колличеству итемов в адаптере, ТО
начинаем цикл i =0; i < размер коллекции со всеми итемами; i ++ {
Если у коллекции со всеми итемами в ячейке [i] получим id И он будет равен id выброного итема(ТОесть пришедший к нам в объекте Intent) , ТО
posution == i е
}а иначе
position == id выброного итема(ТОесть пришедший к нам в объекте Intent)


тебе нужен класс оболочка над коллекцией, да кароч учи джаву там

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
package com.greendield.note;
 
public class Note {
    String name;
    long id;
    boolean selected;
    long data;
    String color;
 
    public Note(String _name,long _id,long _date, boolean _selected, String color) {
        name  = _name;
        id = _id;
        selected = _selected;
        data = _date;
        this.color = color;
    }
    public Note(String _name){
        name = _name;
 
    }
 
    public Note(){
 
    }
 
    public String getName(){
        return name;
    }
    public long getId(){
        return id;
    }
    public void setName(String name){
        this.name = name;
    }
    public void setId(long id){
        this.id = id;
    }
    public boolean getSelected() {
        return selected;
    }
    public void setSelected(boolean selected) {
        this.selected = selected;
    }
    public long getData(){
       return data;
    }
    public void setColor(String color){
        this.color = color;
    }
    public  String getColor(){
        return color;
    }
 
}
 Комментарий модератора 
Мат запрещен в любом виде
1
Gomez99
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 13
03.06.2014, 11:00 #7
премного благодарен уважаемый Гуру Java, что наставили на путь истинный. СПАСИБО!

Добавлено через 11 часов 46 минут
kirawa, Я могу отправить Вам исходник, помогите пожалуйста если можете.
Вот ссылка на исходник: https://cloud.mail.ru/public/c66971e9bf8a/myproject.rar

Добавлено через 55 минут
kirawa, Я могу отправить Вам исходник, помогите пожалуйста если можете.
Вот ссылка на исходник: https://cloud.mail.ru/public/c66971e9bf8a/myproject.rar
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2014, 11:00
Привет! Вот еще темы с ответами:

ListView после загрузки данных подсветить 1-ый элемент - Программирование Android
Доброго времени суток! Подскажите, как подсветить n-ый элемент в ListView после загрузки данных? пробую list1.setSelection(1) - не...

SimpleCursorAdapter(ListView заполняется данными только после прокрутки скрола) - Программирование Android
Помогите решить задачу. У меня ListView начинает заполняться данными, только после первой прокрутки списка. Т.е в начальный момент список...

Listview вывод данных и переход по нажатию на другой Listview SQLite - Программирование Android
Доброго извините за название темы, долго не мог сформировать название, В общем у меня беда с пытаюсь написать программу где первый экран...

После вызова notifydataset() items в listview "моргают" - Программирование Android
столкнулся с такой проблемой, перерыл stackoverflow, ответа не нашел есть список listview, который показывает картинки, загружая их из...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.06.2014, 11:00
Ответ Создать тему
Опции темы

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