Как получить элемент ListView с помощью Android onItemClick?

1

Это продолжение из SO Q здесь, но я все еще ничего не вижу.

Я не знаю, как получить элемент, который был отображен из JSONObject для просмотра списка. Значение ключа HashMap:

map.put(TAG_RES_FILE, resFile);

И я хотел бы поместить эту строку в мой onItemClick(){int passResFile = getResources().getIdentifier(TAG_RES_FILE, "raw", "com.andaero.app");}

Я подумал, поместив имя тега в метод ниже, система автоматически вытащит его из этой позиции позиции - очевидно, нет. Так как это получается? Thnx.

EDIT: я добавил log.i(), чтобы увидеть, какие значения находятся в позиции, которая нажата и возвращается:

getIdentifier (11925): {isRawRes = true, title= Консультационные циркуляторы, label = AC, _id = 1, resFile = advisory_circulators_sort_list, description = Предоставляет такие рекомендации, как методы, процедуры и практики соблюдения правил и требований. containerID = R.id.listContainer}

Это

resFile = advisory_circulators_sort_list

Вот что мне нужно получить - как это сделать?

Это весь слушатель:

public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
                    MainActivity.mLayout.toggleSidebar();
                    setHasOptionsMenu(true);

                    FragmentManager fm = getFragmentManager();
                    final FragmentTransaction lcFT = fm.beginTransaction();
                    lcFT.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out, R.anim.hyperspace_in, R.anim.slide_out);

                    final Bundle args = new Bundle();

                    Object o = lv.getItemAtPosition(pos);
                    String resFile = (String) o.toString();
                    int passResFile = getResources().getIdentifier(TAG_RES_FILE, "raw", "com.andaero.app");
                    args.putInt("KEY_RES_FILE", passResFile);

                    boolean isRawRes = true;
                    args.putBoolean("KEY_IS_RAW_RES", isRawRes);
                    Log.i("getIdentifier", resFile );

                    // Delayed to improve animations
                    final Handler handler = new Handler();
                    handler.postDelayed(new Runnable() {
                        public void run() {
                            ListViewFragment lvf = new ListViewFragment();
                            lcFT.replace(R.id.listContainer, lvf).commit();
                            lvf.setArguments(args);
                        }
                    }, 300);
                }
Теги:
listview
hashmap
onitemclicklistener

2 ответа

1
Лучший ответ

Итак, я пошел вперед и отправил элемент в textView и установил его видимость в файле макета. Это работает отлично, но я надеялся на лучший/более чистый способ сделать это.

Изменен в методе onItemClick() из:

Object o = lv.getItemAtPosition(pos);
String resFile = (String) o.toString();
int passResFile = getResources().getIdentifier(TAG_RES_FILE, "raw", "com.andaero.app");
args.putInt("KEY_RES_FILE", passResFile);

Для этого:

String resFile = ((TextView) view.findViewById(R.id.listResFile)).getText().toString();
int passResFile = getResources().getIdentifier(resFile, "raw", "com.andaero.app");
args.putInt("KEY_RES_FILE", passResFile);
0

TAG_RES_FILE не объявляется в этом методе, поэтому он, вероятно, является константой. чтобы показать, что это правильно, попробуйте отладить этот метод и посмотреть, меняется ли он в соответствии с тем, что вы ожидаете.

на самом деле, во всем этом методе вы даже не смотрите, какой элемент кликнул конечный пользователь, а не через тег вида, а не через позицию элемента. Я также не вижу никакого использования карты, о которой вы говорили.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню