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

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

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

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

10.04.2014, 14:43. Просмотров 1144. Ответов 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);
            
        }
    });
    
    
}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.04.2014, 14:43     Position в ListView после addTextChangedListener
Посмотрите здесь:
android Listview Center position Android
Android Сохранение position элемента ListView при поиске
Не могу передать контекст фрагмента в addTextChangedListener Android
Android Загрузка ListView после AsyncTask
Android Обновление ListView после добавления записи
Android ListView после загрузки данных подсветить 1-ый элемент
SimpleCursorAdapter(ListView заполняется данными только после прокрутки скрола) Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kirawa
33 / 33 / 1
Регистрация: 12.11.2013
Сообщений: 336
10.04.2014, 15:46     Position в ListView после addTextChangedListener #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);
            }
        }
metroten
0 / 0 / 0
Регистрация: 14.05.2013
Сообщений: 29
10.04.2014, 16:53  [ТС]     Position в ListView после addTextChangedListener #3
kirawa, скажи пожалуйста а куда вставлять этот код? я просто совсем новичок в этом, не давно сел за изучение android
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
11.04.2014, 14:38     Position в ListView после addTextChangedListener #4
metroten, так у вас первая активность теряется после вызова второй, может поэтому?
Gomez99
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 13
02.06.2014, 12:32     Position в ListView после addTextChangedListener #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] Буду благодарен.
kirawa
33 / 33 / 1
Регистрация: 12.11.2013
Сообщений: 336
02.06.2014, 14:08     Position в ListView после addTextChangedListener #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;
    }
 
}
 Комментарий модератора 
Мат запрещен в любом виде
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2014, 11:00     Position в ListView после addTextChangedListener
Еще ссылки по теме:
Android После вызова notifydataset() items в listview "моргают"
Android Получить id вместо position в OnItemClickListener
Нормальное размещение после position relative HTML, CSS
В каком случае рекомендуется использовать :margin,padding,float,position:absolute,position:relative HTML, CSS
HTML, CSS Не могу разобраться с position-relative и position-absolute

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

Или воспользуйтесь поиском по форуму:
Gomez99
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 13
03.06.2014, 11:00     Position в ListView после addTextChangedListener #7
премного благодарен уважаемый Гуру Java, что наставили на путь истинный. СПАСИБО!

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

Добавлено через 55 минут
kirawa, Я могу отправить Вам исходник, помогите пожалуйста если можете.
Вот ссылка на исходник: https://cloud.mail.ru/public/c66971e9bf8a/myproject.rar
Yandex
Объявления
03.06.2014, 11:00     Position в ListView после addTextChangedListener
Ответ Создать тему
Опции темы

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