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

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

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

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
Нужна помощь в реализации нажатия на элемент лист вью. Необходимо присвоить каждому в списке элементу переход на разные активити.
Я попробовал реализовать следующим способом, но при осуществления поиска по элементам, первый найденный элемент тоже переходит на ту активити, которая задана для первого элемента массива, как это исправить?
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.08.2013, 11:23
Ответы с готовыми решениями:

Инициализация элементов списка списков (List<List>) происходит одинаково для каждого элемента
Доброго времени суток. Не знаю как лучше озаглавить эту тему, но у меня проблема со следующим...

Выделение элемента в List-View при mouse down
Здравствуйте! Имеется List-View (WinApi) в котором обрабатывается нажатие не Item так:...

Обработка нажатия элемента ListView
Помогите решить один вопрос: у нас есть ListView, в котором имеются элементы; нужно нажать на...

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

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

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

break; где? Добавляй в каждый кейс в конец.
добавил, но по прежнему как открывалась не то что требуется, так и открывается..
есть предположение, что position возвратит номер элемента в уже сформировавшемся списке.
а есть третий атрибут long arg3, который на самом деле есть id элемента. и что его то, скорее всего, и нужно использовать вместо position.но при его использовании элементы не кликабельны...
0
59 / 4 / 1
Регистрация: 31.07.2013
Сообщений: 42
21.08.2013, 14:16 8
Нет, все у тебя правильно. Последний аргумент это ID.
0
3 / 3 / 1
Регистрация: 25.06.2011
Сообщений: 91
21.08.2013, 14:23  [ТС] 9
Цитата Сообщение от Grafity Посмотреть сообщение
Нет, все у тебя правильно. Последний аргумент это ID.
тогда я ума не приложу, почему не осуществляется правильный переход после фильтрации....
0
Android Developer
131 / 131 / 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
3 / 3 / 1
Регистрация: 25.06.2011
Сообщений: 91
21.08.2013, 16:56  [ТС] 11
Wenceslaus, я попробовал, выбрасывает из приложения.
Посмотрел логи, проблема тут...
Java
1
switch ((Integer)arg1.getTag()) {
Пробую что-нибудь с этим сделать, но ошибка всегда именно тут..
0
Android Developer
131 / 131 / 6
Регистрация: 05.07.2013
Сообщений: 205
21.08.2013, 17:50 12
lexus213, как и где вы устанавливаете Tag? Код в студию. Какая ошибка? Её тоже покажите (если NullPointerException, то Tag не установлен; если ClassCastException, то Tag установлен неверно).
0
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
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
23.08.2013, 13:27 14
смотрите логи
0
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
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
23.08.2013, 14:23 16
только одну строчку в логи вывело? не верю.
0
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
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
23.08.2013, 14:53 18
сделайте фильтр по апликейшену и выложите нормальные логи с екзепшеном.
0
106 / 106 / 1
Регистрация: 09.04.2012
Сообщений: 655
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
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.08.2013, 15:09
Помогаю со студенческими работами здесь

Количество совпадений для каждого элемента List<string>
На входе List&lt;string&gt;, который содержит каждый раз разное количество элементов. Он передается в ...

Как отследить событие нажатия каждого элемента ListView по отдельности
Здравствуйте возникло несколько вопросов по ListView 1. Как отследить событие нажатия каждого...

Tree View + List View. Как из програмы определить в чем именно на данный момент выделен елемент ?
У меня на одной форме радом сидят Tree View и List View (как в explore). Вопрос: как из програмы...

Обработка массива (построить новую «сглаженную» матрицу, значения каждого элемента которой являются:)
По матрице с действительными элементами построить новую «сглаженную» матрицу, значения каждого...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru