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

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

Войти
Регистрация
Восстановить пароль
 
Ibir
1 / 1 / 0
Регистрация: 18.03.2014
Сообщений: 5
#1

Получить id вместо position в OnItemClickListener - Программирование Android

19.03.2014, 03:37. Просмотров 1306. Ответов 6
Метки нет (Все метки)

Здравствуйте. Хотел для себя создать справочник, для чего в сети нашел пример, который я немного дополнил и в принципе он рабочий:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
listView.setOnItemClickListener(new OnItemClickListener() 
        {
            public void onItemClick(AdapterView<?> a, View v, int position, long id) 
            {
               [B] String itemname = new Integer(position).toString();[/B] <= this
 
                Intent intent = new Intent();
                intent.setClass(Spisok.this, Prob.class);
 
                Bundle b = new Bundle(); 
                b.putString("posit", itemname);  
                intent.putExtras(b);
                startActivity(intent);
             }
        });
принимает:
Java
1
2
3
4
5
Bundle bundle = getIntent().getExtras();
        String itemname = "n" + bundle.getString("posit");
 
        Context context = getBaseContext();
        String text = readRawTextFile(context, getResources().getIdentifier(itemname, "raw", "ru.ibir.irrveb"));
На выходе я получаю значения типа: n0, n1 и т.д. это по позиции элемента.
А в моём примере я применяю фильтр к списку, получается что элементов в списке становится меньше и они не соответствуют значениям n0, n1 и т.д.
пример:
Java
1
2
3
4
5
текст1 -> n0
текст2 -> n1
текст3 -> n2
[B]А при использования фильтра:[/B]
текст3 -> n0
Поэтому, наверное, мне необходимо брать не position а id.
Посоветовали заменить строчку на:
Java
1
String itemname = String.valueOf(v.getId());
Тогда приложение вылетает с ошибкой. а на выходе получаются значения одного типа: n-1
Помогите решить проблему.

Добавлено через 13 часов 36 минут
Я исправит чуть так:
Java
1
2
3
4
5
6
7
8
9
10
11
listView.setOnItemClickListener(new OnItemClickListener() 
        {
            public void onItemClick(AdapterView<?> parent, View view,  int position, long id) 
            {
 
                 Intent intent = new Intent(Spisok.this, Prob.class);
                 intent.putExtra("id", Long.toString(id));
                 startActivity(intent);
 
             }
        });
и
Java
1
2
3
4
5
Intent intent = getIntent();
        
        String lName = intent.getStringExtra("id");
 
        String itemname = ("n" + lName); //получаем строку и формируем имя ресурса
Работает, однако всё равно тот же результат (
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2014, 03:37
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Получить id вместо position в OnItemClickListener (Программирование Android):

Получить из ListView адаптера значение в OnItemClickListener - Программирование Android
В OnItemClickListener передается заполненый адаптер и номер позиции. Как вытянуть из него значение объекта ? public void...

OnItemClickListener - Программирование Android
Необходимо при клике по Item ListView изменить этот итем, решил подменять его xml файл разметки. Завел массив boolean mExtendItem; ...

В ListView не работает OnItemClickListener - Программирование Android
Здравствуйте, Впервые попался на такую проблему, что в ListView не работает OnItemClickListener. При клике на элемент списка, в...

Не могу заставить OnItemClickListener, ловить нажатие на элемент списка ListView - Программирование Android
Пишу простенькое приложение по сбору цен на разные товары, сейчас пытаюсь оптимизировать часть кода который работает со списком, когда...

В каком случае рекомендуется использовать :margin,padding,float,position:absolute,position:relative - HTML, CSS
В каком случае рекомендуется использовать :margin,padding,float,position:absolute,position:relative. В каких случаях при верстке нужно...

Не могу разобраться с position-relative и position-absolute - HTML, CSS
Дано: в блоке со свойствами position-relative помещен блок со свойствами position-absolute. Вопрос: почему атрибуты top и bottom работают...

6
kirawa
34 / 34 / 1
Регистрация: 12.11.2013
Сообщений: 340
19.03.2014, 08:00 #2
Java
1
2
3
4
5
6
7
protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        Intent intent = new Intent(this, xxx.class);
        intent.putExtra(KEY_ID, id);
        intent.putExtra(POSITION, position);
        startActivityForResult(intent, ACTIVITY_XXX);
    }
а в классе XXX принимай так:
Java
1
2
3
Bundle bundle = getIntent().getExtras();
          _id = bundle.getLong(KEY_ID);
          position = bundle.getInt(POSITION);
0
Ibir
1 / 1 / 0
Регистрация: 18.03.2014
Сообщений: 5
19.03.2014, 19:01  [ТС] #3
Спасибо вам за ответ.
Однако, Eclipse подчеркивает OnItemClickListener, в чем может быть ошибка?

Добавлено через 1 час 40 минут
Вообщем проблема даже не в этом, в моих примерах всё (значение, позиция, id) хорошо извлекается, но при:
Java
1
adapter.getFilter().filter("aaa");
Список не обновляется. Я побывал:
Java
1
adapter.notifyDataSetChanged
Тот же самый результат, после фильтра, последний элемент списка (если он остался 1) реагирует так, как будто он первый в списке.
0
Ibir
1 / 1 / 0
Регистрация: 18.03.2014
Сообщений: 5
20.03.2014, 19:03  [ТС] #4
Может кто помочь?(
0
Ibir
1 / 1 / 0
Регистрация: 18.03.2014
Сообщений: 5
22.03.2014, 18:55  [ТС] #5
Спрашивал на 4 форумах (ссылки привадить не буду, дабы нельзя), фиг кто помог, ловите умники, вот так извлекается любое значение из списка в соответствие с порядком:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
private static final String TAG_NAME = "name";
 
listView.setOnItemClickListener(new OnItemClickListener() 
                {
                    public void onItemClick(AdapterView<?> parent, View view,  int position, long id) 
                    {
                        String key = ((TextView) view.findViewById(R.id.text1)).getText().toString();
                        Intent intent = new Intent(getApplicationContext(), Prob.class);
                        intent.putExtra(TAG_NAME, key);
                        startActivity(intent);
                        }
                    });
                }
0
dimvolk
0 / 0 / 0
Регистрация: 31.03.2014
Сообщений: 1
03.04.2014, 18:25 #6
Тоже не один день провозился с этим. А принимающая часть?
Спасибо
0
Ibir
1 / 1 / 0
Регистрация: 18.03.2014
Сообщений: 5
07.04.2014, 23:18  [ТС] #7
Java
1
2
3
4
5
6
7
8
9
private static final String TAG_NAME = "name";
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_prob);
        
        Intent intent = getIntent();
        String Name = intent.getStringExtra(TAG_NAME);
Поздновато, но может пригодится )
1
07.04.2014, 23:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2014, 23:18
Привет! Вот еще темы с ответами:

Блоки relative и position внутри блока с position: relative - HTML, CSS
Всем привет! Я новичок, верстаю свой первый сайт (http://cosmetolog.cu.cc/). У меня возник вопрос касательно слайдера. Есть...

Как получить список вместо коллекции - C#
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using...

Как получить undefined reference вместо вывода? - C++
Была ситуация - объявлен класс - в нем оператор приведения к некому типу (указатель на функцию), оператор вывода в поток для этого класса...

Как получить html-код в Post-запросе вместо массива байтов - C#
Добрый Есть такая проблема ,делаю GET запрос ,в ответ вместо html кода приходит какой то контент в двоичном виде . Через сниффер вижу во...


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

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

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