Это продолжение из 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);
}
Итак, я пошел вперед и отправил элемент в 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);
TAG_RES_FILE не объявляется в этом методе, поэтому он, вероятно, является константой. чтобы показать, что это правильно, попробуйте отладить этот метод и посмотреть, меняется ли он в соответствии с тем, что вы ожидаете.
на самом деле, во всем этом методе вы даже не смотрите, какой элемент кликнул конечный пользователь, а не через тег вида, а не через позицию элемента. Я также не вижу никакого использования карты, о которой вы говорили.