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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 49, средняя оценка - 4.63
lexus213
3 / 3 / 0
Регистрация: 25.06.2011
Сообщений: 78
#1

Обработка нажатия каждого элемента List View - Программирование Android

21.08.2013, 11:23. Просмотров 7316. Ответов 22
Метки нет (Все метки)

Доброго времени суток!
Нужна помощь в реализации нажатия на элемент лист вью. Необходимо присвоить каждому в списке элементу переход на разные активити.
Я попробовал реализовать следующим способом, но при осуществления поиска по элементам, первый найденный элемент тоже переходит на ту активити, которая задана для первого элемента массива, как это исправить?
Java
1
2
3
4
5
6
7
8
9
10
11
12
 lv.setOnItemClickListener(new OnItemClickListener() {
     
        public void onItemClick(AdapterView<?> arg0,
                            View arg1, int position, long arg3)
       {
            switch (position) {
            case 0:
                Intent intent = new Intent(getActivity(), bbns.class);
                startActivity(intent);
        }        }   });
    
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2013, 11:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обработка нажатия каждого элемента List View (Программирование Android):

Обработка нажатия на часть элемента списка - Программирование Android
Как в Android обработать нажатие не на весь элемент списка ListView, а на отдельный его элемент? onItemClickListener обрабатывает вроде...

list view управление - Программирование Android
у меня есть лист вью на шаблоне одна надпись и три кнопки, вот вопрос как управлять то этими кнопка как обрабатывать (ЗЫ знаю как...

Expandable List View Android - Программирование Android
Создал кастомный выдвигающийся список, но при запуске приложения адаптер списка не вызывает метод getChildView и элементы группы не...

Fragment как в нем добавить List View - Программирование Android
В моей программе я с главного активити через naviganion drawer попадаю во фрагмент и в этом фрагменте мне нужно чтобы у меня был list view....

Добавление элемента - наследника View - Программирование Android
Здравствуйте. Пишу для Android простенькую игрушку. Для нее мне понадобилось написать класс, рисующий круг - наследник View. На экране...

Обработка нажатия на RadioButton - Программирование Android
Постигаю андроид. Не могу разобраться со свичем. EditText принимает число, сохранил его, дальше выбираю RadioBatton и нифига не...

22
Grafity
59 / 4 / 1
Регистрация: 31.07.2013
Сообщений: 42
21.08.2013, 11:47 #2
А названия интентов везде одинаковые делаешь, наверное?
0
lexus213
3 / 3 / 0
Регистрация: 25.06.2011
Сообщений: 78
21.08.2013, 11:50  [ТС] #3
Цитата Сообщение от Grafity Посмотреть сообщение
А названия интентов везде одинаковые делаешь, наверное?
да...неужели в этом дело?
0
Grafity
59 / 4 / 1
Регистрация: 31.07.2013
Сообщений: 42
21.08.2013, 12:07 #4
Цитата Сообщение от lexus213 Посмотреть сообщение
да...неужели в этом дело?
Попробуй сделать intent_1, intent_2 и т.д.
0
lexus213
3 / 3 / 0
Регистрация: 25.06.2011
Сообщений: 78
21.08.2013, 12:48  [ТС] #5
Цитата Сообщение от Grafity Посмотреть сообщение
Попробуй сделать intent_1, intent_2 и т.д.
эмм..ничего не изменилось...
0
Grafity
59 / 4 / 1
Регистрация: 31.07.2013
Сообщений: 42
21.08.2013, 12:54 #6
аааа... Все, понял. Невнимательно посмотрел вначале.

break; где? Добавляй в каждый кейс в конец.
0
lexus213
3 / 3 / 0
Регистрация: 25.06.2011
Сообщений: 78
21.08.2013, 13:24  [ТС] #7
Цитата Сообщение от Grafity Посмотреть сообщение
аааа... Все, понял. Невнимательно посмотрел вначале.

break; где? Добавляй в каждый кейс в конец.
добавил, но по прежнему как открывалась не то что требуется, так и открывается..
есть предположение, что position возвратит номер элемента в уже сформировавшемся списке.
а есть третий атрибут long arg3, который на самом деле есть id элемента. и что его то, скорее всего, и нужно использовать вместо position.но при его использовании элементы не кликабельны...
0
Grafity
59 / 4 / 1
Регистрация: 31.07.2013
Сообщений: 42
21.08.2013, 14:16 #8
Нет, все у тебя правильно. Последний аргумент это ID.
0
lexus213
3 / 3 / 0
Регистрация: 25.06.2011
Сообщений: 78
21.08.2013, 14:23  [ТС] #9
Цитата Сообщение от Grafity Посмотреть сообщение
Нет, все у тебя правильно. Последний аргумент это ID.
тогда я ума не приложу, почему не осуществляется правильный переход после фильтрации....
0
Wenceslaus
Android Developer
130 / 130 / 4
Регистрация: 05.07.2013
Сообщений: 205
21.08.2013, 15:01 #10
lexus213, всё верно. Первый элемент в списке (до или после поиска по элементам) будет иметь position==0. Ведь он первый в списке, верно? Это связано с тем, что список формируется заново и нумерация элементов слетает. Чтобы этого избежать - нужно использовать свой Adapter, где каждому элементу (в зависимости от содержания) присваивается Tag (объект, к примеру Integer) и уже относительно Tag'а и производить выбор. Примерно так:
Java
1
2
3
4
5
6
7
8
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
    switch ((Integer)arg1.getTag()) {
    case 0:
        Intent intent = new Intent(getActivity(), bbns.class);
        startActivity(intent);
        break;
    }
}
1
lexus213
3 / 3 / 0
Регистрация: 25.06.2011
Сообщений: 78
21.08.2013, 16:56  [ТС] #11
Wenceslaus, я попробовал, выбрасывает из приложения.
Посмотрел логи, проблема тут...
Java
1
switch ((Integer)arg1.getTag()) {
Пробую что-нибудь с этим сделать, но ошибка всегда именно тут..
0
Wenceslaus
Android Developer
130 / 130 / 4
Регистрация: 05.07.2013
Сообщений: 205
21.08.2013, 17:50 #12
lexus213, как и где вы устанавливаете Tag? Код в студию. Какая ошибка? Её тоже покажите (если NullPointerException, то Tag не установлен; если ClassCastException, то Tag установлен неверно).
0
lexus213
3 / 3 / 0
Регистрация: 25.06.2011
Сообщений: 78
23.08.2013, 13:12  [ТС] #13
Чего я только не перепробовал...
Вот так нельзя разве?По сути должно работать...но при запуске приложение вылетает...
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
public class FragmentView3 extends Fragment {
 
        public EditText et;
        public ListView lv;
 
        private ArrayList<String> array_sort;
        int textlength=0;
 
        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
 
        lv = (ListView) getView().findViewById(android.R.id.list);
        lv.setAdapter(new bsAdapter(getActivity()));
        
        
        
        
        
        lv.setOnItemClickListener(new OnItemClickListener() {
            
            public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
                
                
                int pos = (Integer) arg1.getTag();
                switch ((Integer)arg1.getTag()) {
                 
                 case 0:
                     Intent intent = new Intent(getActivity(), bbns.class);
                     startActivity(intent);
                     break;
                 }     }   });
        
        }
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState, int position) {   
            super.onCreate(savedInstanceState);
 
            final String[] listview_names = {"Белорусский бизнес на селе","Общество с ограниченной ответственностью","Учредители ООО","Уставный фонд ООО",
                    "Частное унитарное предприятие","Юридический адрес частного УП","Учредитель частного УП",
                    "Учредительные документы ООО","Наименование частного УП","Уставный фонд частного УП","Юридический адрес ООО","Порядок регистрации частного УП",
                    "Порядок регистрации ООО (ОДО)","Регистрация ИП в Беларуси","Согласование наименования","Госпошлина за регистрацию ИП","Советы по выбору наименования организации",
                    "Порядок регистрации ИП","Общество с дополнительной ответственностью","Получение паспорта","Замена паспорта по сроку действия","Замена паспорта при утере",
                    "Ликвидация форм собственности","Регистрация форм собственности"};
            
            
            View myView = inflater.inflate(R.layout.search, container, false);
 
            et  = (EditText)myView.findViewById(R.id.EditText01);
           // lv  =   (ListView)myView.findViewById(android.R.id.list);
 
         //   
            array_sort=new ArrayList<String> (Arrays.asList(listview_names));
            setListAdapter(new bsAdapter(getActivity()));
 
            et.addTextChangedListener(new TextWatcher()
            {
                public void afterTextChanged(Editable s)
                {
                      // Abstract Method of TextWatcher Interface.
                }
                public void beforeTextChanged(CharSequence s,
                        int start, int count, int after)
                {
                    // Abstract Method of TextWatcher Interface.
                }
                public void onTextChanged(CharSequence s,
                        int start, int before, int count)
                {
                    textlength = et.getText().length();
                    array_sort.clear();
                    for (int i = 0; i < listview_names.length; i++)
                    {
                        if (textlength <= listview_names[i].length())
                        {
 
                            if(listview_names[i].toLowerCase().contains(
                                    et.getText().toString().toLowerCase().trim()))
                            {
                                array_sort.add(listview_names[i]);
                            }
                          }
                    }
                    AppendList(array_sort);
                    }
                });
 
            return myView;
        }
 
        public void AppendList(ArrayList<String> str)
        {
            setListAdapter(new bsAdapter (getActivity()));
           
        }
 
        private void setListAdapter(bsAdapter bsAdapter) {
            
        }
 
        class bsAdapter extends BaseAdapter
        { 
            Activity cntx;
            private View view;
          
            public bsAdapter(Activity context)
            {
                this.cntx=context;
                
            }
 
            public int getCount()
            {
                return array_sort.size();
            }
 
            public Object getItem(int position)
            {
                // TODO Auto-generated method stub
                return array_sort.get(position);
            }
 
            public long getItemId(int position)
            {
                // TODO Auto-generated method stub
                return array_sort.size();
            }
 
            public View getView(final int position, View convertView, ViewGroup parent)
            { 
                 view.setTag(position);
                View row=null;
               
                LayoutInflater inflater=cntx.getLayoutInflater();
                row=inflater.inflate(R.layout.list, null);
 
                TextView   tv   =   (TextView)  row.findViewById(R.id.title);
 
                tv.setText(array_sort.get(position));
               
            return row;
            } 
              }
        }
случайно не тут ошибка?
Java
1
lv = (ListView) getView().findViewById(android.R.id.list);
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
23.08.2013, 13:27 #14
смотрите логи
0
lexus213
3 / 3 / 0
Регистрация: 25.06.2011
Сообщений: 78
23.08.2013, 13:31  [ТС] #15
Цитата Сообщение от V0v1k Посмотреть сообщение
смотрите логи
лог из планшета говорит:
FragmentView3.onActivityCreated(FragmentView3.java:36)

Java:36 :
Java
1
lv = (ListView) getView().findViewById(android.R.id.list);
0
23.08.2013, 13:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.08.2013, 13:31
Привет! Вот еще темы с ответами:

Обработка длительного нажатия - Программирование Android
Добрый День! Пишу на libGdx и столкнулся с проблемой: нужно считывать время нажатия на экран. В зависимости от время нажатия на экран будут...

Обработка нажатия EditText - Программирование Android
Необходимо реализовать поля ввода дат для задания периода. Так как надо по дизайну чтобы подсказка всплывала как в TextInputLayout,...

Обработка нажатия кнопок - Программирование Android
Всем привет! Целый день мучала проблема. Что имею: телефон по bluetooth подключается к arduino и передает туда байты, в дуине это...

Обработка нажатия кнопок - Программирование Android
Здравствуйте! Недавно начал изучать программирование под Android. Узнал что для обработки нажатия кнопок используется как минимум 2...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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