Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.74/46: Рейтинг темы: голосов - 46, средняя оценка - 4.74
lexus213
3 / 3 / 1
Регистрация: 25.06.2011
Сообщений: 91
1

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

21.08.2013, 11:23. Просмотров 8594. Ответов 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
Ответы с готовыми решениями:

Обработка нажатия на часть элемента списка
Как в Android обработать нажатие не на весь элемент списка ListView, а на...

list view управление
у меня есть лист вью на шаблоне одна надпись и три кнопки, вот вопрос как...

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

Fragment как в нем добавить List View
В моей программе я с главного активити через naviganion drawer попадаю во...

Обработка длительного нажатия
В игре нужно перемещать предмет тогда, когда палец на экране: пальцем касаюсь...

22
Grafity
59 / 4 / 1
Регистрация: 31.07.2013
Сообщений: 42
21.08.2013, 11:47 2
А названия интентов везде одинаковые делаешь, наверное?
0
lexus213
3 / 3 / 1
Регистрация: 25.06.2011
Сообщений: 91
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 / 1
Регистрация: 25.06.2011
Сообщений: 91
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 / 1
Регистрация: 25.06.2011
Сообщений: 91
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 / 1
Регистрация: 25.06.2011
Сообщений: 91
21.08.2013, 14:23  [ТС] 9
Цитата Сообщение от Grafity Посмотреть сообщение
Нет, все у тебя правильно. Последний аргумент это ID.
тогда я ума не приложу, почему не осуществляется правильный переход после фильтрации....
0
Wenceslaus
Android Developer
130 / 130 / 6
Регистрация: 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 / 1
Регистрация: 25.06.2011
Сообщений: 91
21.08.2013, 16:56  [ТС] 11
Wenceslaus, я попробовал, выбрасывает из приложения.
Посмотрел логи, проблема тут...
Java
1
switch ((Integer)arg1.getTag()) {
Пробую что-нибудь с этим сделать, но ошибка всегда именно тут..
0
Wenceslaus
Android Developer
130 / 130 / 6
Регистрация: 05.07.2013
Сообщений: 205
21.08.2013, 17:50 12
lexus213, как и где вы устанавливаете Tag? Код в студию. Какая ошибка? Её тоже покажите (если NullPointerException, то Tag не установлен; если ClassCastException, то Tag установлен неверно).
0
lexus213
3 / 3 / 1
Регистрация: 25.06.2011
Сообщений: 91
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
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
23.08.2013, 13:27 14
смотрите логи
0
lexus213
3 / 3 / 1
Регистрация: 25.06.2011
Сообщений: 91
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
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
23.08.2013, 14:23 16
только одну строчку в логи вывело? не верю.
0
lexus213
3 / 3 / 1
Регистрация: 25.06.2011
Сообщений: 91
23.08.2013, 14:38  [ТС] 17
Цитата Сообщение от V0v1k Посмотреть сообщение
только одну строчку в логи вывело? не верю.
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
I/ActivityManager(  234): Start proc ru.startandroid.develop.p0771tabintent for activity ru.startandroid.develop.p0771tabintent/.MainActivity: pid=23549 uid=10119 gids={}
V/ActivityManager(  234): Binding process pid 23549 to record ProcessRecord{42704348 23549:ru.startandroid.develop.p0771tabintent/10119}
V/ActivityManager(  234): New app record ProcessRecord{42704348 23549:ru.startandroid.develop.p0771tabintent/10119} thread=android.os.BinderProxy@4259c550 pid=23549
V/ActivityManager(  234): Launching: ActivityRecord{42a88468 ru.startandroid.develop.p0771tabintent/.MainActivity}
V/ActivityManager(  234): Activity idle: Token{42ba4160 ActivityRecord{42a88468 ru.startandroid.develop.p0771tabintent/.MainActivity}}
V/ActivityManager(  234): Removing app ProcessRecord{42aaf7b8 0:com.exent.android.gametanium/10029} from list [ActivityRecord{429afd40 com.android.systemui/.usb.UsbStorageActivity}, ActivityRecord{428fe960 com.android.settings/.Settings}, ActivityRecord{4135e2b8 com.lenovo.launcher/com.lenovo.launcher2.Launcher}, ActivityRecord{41742730 org.jtb.alogcat/.LogActivity}, ActivityRecord{418546d0 com.topface.topface/.ui.NavigationActivity}, ActivityRecord{4258d678 com.topface.topface/.ui.ContainerActivity}, ActivityRecord{42a88468 ru.startandroid.develop.p0771tabintent/.MainActivity}] with 7 entries
V/ActivityManager(  234): Record #6 ActivityRecord{42a88468 ru.startandroid.develop.p0771tabintent/.MainActivity}: app=ProcessRecord{42704348 23549:ru.startandroid.develop.p0771tabintent/10119}
V/WindowManager(  234): Changing focus from null to Window{4185cb18 ru.startandroid.develop.p0771tabintent/ru.startandroid.develop.p0771tabintent.MainActivity paused=false}
I/WindowManager(  234): Gaining focus: Window{4185cb18 ru.startandroid.develop.p0771tabintent/ru.startandroid.develop.p0771tabintent.MainActivity paused=false}
E/AndroidRuntime(23549):    at ru.startandroid.develop.p0771tabintent.FragmentView3.onActivityCreated(FragmentView3.java:36)
W/ActivityManager(  234):   Force finishing activity ru.startandroid.develop.p0771tabintent/.MainActivity
V/WindowManager(  234): Changing focus from Window{4185cb18 ru.startandroid.develop.p0771tabintent/ru.startandroid.develop.p0771tabintent.MainActivity paused=true} to Window{41860588  paused=false}
W/ActivityManager(  234): Activity pause timeout for ActivityRecord{42a88468 ru.startandroid.develop.p0771tabintent/.MainActivity}
V/ActivityManager(  234): Stopping ActivityRecord{42a88468 ru.startandroid.develop.p0771tabintent/.MainActivity}: nowVisible=false waitingVisible=true finishing=true
V/ActivityManager(  234): Stopping ActivityRecord{42a88468 ru.startandroid.develop.p0771tabintent/.MainActivity}: nowVisible=true waitingVisible=false finishing=true
V/ActivityManager(  234): Ready to stop: ActivityRecord{42a88468 ru.startandroid.develop.p0771tabintent/.MainActivity}
I/WindowManager(  234): WIN DEATH: Window{4185cb18 ru.startandroid.develop.p0771tabintent/ru.startandroid.develop.p0771tabintent.MainActivity paused=false}
I/ActivityManager(  234): Process ru.startandroid.develop.p0771tabintent (pid 23549) has died.
V/ActivityManager(  234): Dying app: ProcessRecord{42704348 23549:ru.startandroid.develop.p0771tabintent/10119}, pid: 23549, thread: android.os.BinderProxy@4259c550
V/ActivityManager(  234): Removing app ProcessRecord{42704348 0:ru.startandroid.develop.p0771tabintent/10119} from list [ActivityRecord{429afd40 com.android.systemui/.usb.UsbStorageActivity}, ActivityRecord{428fe960 com.android.settings/.Settings}, ActivityRecord{41742730 org.jtb.alogcat/.LogActivity}, ActivityRecord{418546d0 com.topface.topface/.ui.NavigationActivity}, ActivityRecord{4258d678 com.topface.topface/.ui.ContainerActivity}, ActivityRecord{4135e2b8 com.lenovo.launcher/com.lenovo.launcher2.Launcher}] with 6 entries
V/ActivityManager(  234): Removing app ProcessRecord{42704348 0:ru.startandroid.develop.p0771tabintent/10119} from list [] with 0 entries
V/ActivityManager(  234): Removing app ProcessRecord{42704348 0:ru.startandroid.develop.p0771tabintent/10119} from list [] with 0 entries
V/ActivityManager(  234): Removing app ProcessRecord{42704348 0:ru.startandroid.develop.p0771tabintent/10119} from list [] with 0 entries
V/ActivityManager(  234): Removing app ProcessRecord{42704348 0:ru.startandroid.develop.p0771tabintent/10119} from list [] with 0 entries
W/ActivityManager(  234): Activity destroy timeout for ActivityRecord{42a88468 ru.startandroid.develop.p0771tabintent/.MainActivity}
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
23.08.2013, 14:53 18
сделайте фильтр по апликейшену и выложите нормальные логи с екзепшеном.
0
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 651
23.08.2013, 14:55 19
А чего
Цитата Сообщение от lexus213 Посмотреть сообщение
Java
1
2
3
4
@Override
public void onActivityCreated(Bundle savedInstanceState) {
 super.onActivityCreated(savedInstanceState);
lv = (ListView) getView().findViewById(android.R.id.list);
вместо
Java
1
2
3
4
5
6
7
8
9
10
11
public class FragmentView1 extends Fragment {   
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {     
        
        View myView = inflater.inflate(R.layout.about, container, false);
        
      
        return myView;
    }
}
?
0
lexus213
3 / 3 / 1
Регистрация: 25.06.2011
Сообщений: 91
23.08.2013, 15:09  [ТС] 20
Цитата Сообщение от Digetix Посмотреть сообщение
А чего

вместо
Java
1
2
3
4
5
6
7
8
9
10
11
public class FragmentView1 extends Fragment {   
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {     
        
        View myView = inflater.inflate(R.layout.about, container, false);
        
      
        return myView;
    }
}
?
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
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;
        }
0
23.08.2013, 15:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.08.2013, 15:09

Обработка нажатия по координатам
Есть ImageView (.png). Нужно обработать нажатия через OnTouchListener в 3-х...

Обработка нажатия EditText
Необходимо реализовать поля ввода дат для задания периода. Так как надо по...

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


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

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

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