2012-06-12 3 views
1

Это продолжение от SO Q here, но я все еще ничего не вижу.Как получить элемент ListView с Android onItemClick?

Я не знаю, как получить элемент, который был отображен из 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, заголовок = консультативное циркуляционные, этикетки = АС, _id = 1, resFile = advisory_circulators_sort_list, описание = Обеспечивает руководство, такие как методы, процедуры и практики для соблюдения правил и требований., 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); 
       } 

ответ

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 не объявлен в этом методе, так что это, вероятно, постоянная. , чтобы показать, что это правильно, попробуйте отладить этот метод и посмотрите, меняется ли он в соответствии с тем, что вы ожидаете.

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

Смежные вопросы