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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 49, средняя оценка - 4.63
lexus213
 Аватар для lexus213
3 / 3 / 0
Регистрация: 25.06.2011
Сообщений: 71
21.08.2013, 11:23     Обработка нажатия каждого элемента List View #1
Доброго времени суток!
Нужна помощь в реализации нажатия на элемент лист вью. Необходимо присвоить каждому в списке элементу переход на разные активити.
Я попробовал реализовать следующим способом, но при осуществления поиска по элементам, первый найденный элемент тоже переходит на ту активити, которая задана для первого элемента массива, как это исправить?
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);
        }        }   });
    
    }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Grafity
59 / 4 / 1
Регистрация: 31.07.2013
Сообщений: 42
21.08.2013, 11:47     Обработка нажатия каждого элемента List View #2
А названия интентов везде одинаковые делаешь, наверное?
lexus213
 Аватар для lexus213
3 / 3 / 0
Регистрация: 25.06.2011
Сообщений: 71
21.08.2013, 11:50  [ТС]     Обработка нажатия каждого элемента List View #3
Цитата Сообщение от Grafity Посмотреть сообщение
А названия интентов везде одинаковые делаешь, наверное?
да...неужели в этом дело?
Grafity
59 / 4 / 1
Регистрация: 31.07.2013
Сообщений: 42
21.08.2013, 12:07     Обработка нажатия каждого элемента List View #4
Цитата Сообщение от lexus213 Посмотреть сообщение
да...неужели в этом дело?
Попробуй сделать intent_1, intent_2 и т.д.
lexus213
 Аватар для lexus213
3 / 3 / 0
Регистрация: 25.06.2011
Сообщений: 71
21.08.2013, 12:48  [ТС]     Обработка нажатия каждого элемента List View #5
Цитата Сообщение от Grafity Посмотреть сообщение
Попробуй сделать intent_1, intent_2 и т.д.
эмм..ничего не изменилось...
Grafity
59 / 4 / 1
Регистрация: 31.07.2013
Сообщений: 42
21.08.2013, 12:54     Обработка нажатия каждого элемента List View #6
аааа... Все, понял. Невнимательно посмотрел вначале.

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

break; где? Добавляй в каждый кейс в конец.
добавил, но по прежнему как открывалась не то что требуется, так и открывается..
есть предположение, что position возвратит номер элемента в уже сформировавшемся списке.
а есть третий атрибут long arg3, который на самом деле есть id элемента. и что его то, скорее всего, и нужно использовать вместо position.но при его использовании элементы не кликабельны...
Grafity
59 / 4 / 1
Регистрация: 31.07.2013
Сообщений: 42
21.08.2013, 14:16     Обработка нажатия каждого элемента List View #8
Нет, все у тебя правильно. Последний аргумент это ID.
lexus213
 Аватар для lexus213
3 / 3 / 0
Регистрация: 25.06.2011
Сообщений: 71
21.08.2013, 14:23  [ТС]     Обработка нажатия каждого элемента List View #9
Цитата Сообщение от Grafity Посмотреть сообщение
Нет, все у тебя правильно. Последний аргумент это ID.
тогда я ума не приложу, почему не осуществляется правильный переход после фильтрации....
Wenceslaus
Android Developer
 Аватар для Wenceslaus
129 / 129 / 4
Регистрация: 05.07.2013
Сообщений: 205
21.08.2013, 15:01     Обработка нажатия каждого элемента List View #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;
    }
}
lexus213
 Аватар для lexus213
3 / 3 / 0
Регистрация: 25.06.2011
Сообщений: 71
21.08.2013, 16:56  [ТС]     Обработка нажатия каждого элемента List View #11
Wenceslaus, я попробовал, выбрасывает из приложения.
Посмотрел логи, проблема тут...
Java
1
switch ((Integer)arg1.getTag()) {
Пробую что-нибудь с этим сделать, но ошибка всегда именно тут..
Wenceslaus
Android Developer
 Аватар для Wenceslaus
129 / 129 / 4
Регистрация: 05.07.2013
Сообщений: 205
21.08.2013, 17:50     Обработка нажатия каждого элемента List View #12
lexus213, как и где вы устанавливаете Tag? Код в студию. Какая ошибка? Её тоже покажите (если NullPointerException, то Tag не установлен; если ClassCastException, то Tag установлен неверно).
lexus213
 Аватар для lexus213
3 / 3 / 0
Регистрация: 25.06.2011
Сообщений: 71
23.08.2013, 13:12  [ТС]     Обработка нажатия каждого элемента List View #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);
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
23.08.2013, 13:27     Обработка нажатия каждого элемента List View #14
смотрите логи
lexus213
 Аватар для lexus213
3 / 3 / 0
Регистрация: 25.06.2011
Сообщений: 71
23.08.2013, 13:31  [ТС]     Обработка нажатия каждого элемента List View #15
Цитата Сообщение от V0v1k Посмотреть сообщение
смотрите логи
лог из планшета говорит:
FragmentView3.onActivityCreated(FragmentView3.java:36)

Java:36 :
Java
1
lv = (ListView) getView().findViewById(android.R.id.list);
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
23.08.2013, 14:23     Обработка нажатия каждого элемента List View #16
только одну строчку в логи вывело? не верю.
lexus213
 Аватар для lexus213
3 / 3 / 0
Регистрация: 25.06.2011
Сообщений: 71
23.08.2013, 14:38  [ТС]     Обработка нажатия каждого элемента List View #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}
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
23.08.2013, 14:53     Обработка нажатия каждого элемента List View #18
сделайте фильтр по апликейшену и выложите нормальные логи с екзепшеном.
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 647
23.08.2013, 14:55     Обработка нажатия каждого элемента List View #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;
    }
}
?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.08.2013, 15:09     Обработка нажатия каждого элемента List View
Еще ссылки по теме:

Обработка нажатия на часть элемента списка Android
Обработка нажатия кнопок Android
Android Обработка длительного нажатия
Android Обработка нажатия кнопок
Fragment как в нем добавить List View Android

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

Или воспользуйтесь поиском по форуму:
lexus213
 Аватар для lexus213
3 / 3 / 0
Регистрация: 25.06.2011
Сообщений: 71
23.08.2013, 15:09  [ТС]     Обработка нажатия каждого элемента List View #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;
        }
Yandex
Объявления
23.08.2013, 15:09     Обработка нажатия каждого элемента List View
Ответ Создать тему
Опции темы

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