如何使用Android onItemClick获取ListView项?

时间:2012-06-12 19:53:56

标签: android json listview hashmap onitemclicklistener

这是SO Q here的延续,但我仍然遗漏了一些东西。

我不知道如何获取从JSONObject为列表视图绘制的项目。 HashMap键值为:

map.put(TAG_RES_FILE, resFile);

我想将该字符串放入我的onItemClick(){int passResFile = getResources().getIdentifier(TAG_RES_FILE, "raw", "com.andaero.app");}

我想通过将标签名称放在下面的方法中,系统会自动从该项目位置拉出 - 显然不是。那怎么弄呢?日Thnx。

编辑:我添加了一个log.i()来查看点击位置内的值,然后返回:

  

getIdentifier(11925):{isRawRes = true,title = Advisory Circulators,   label = AC,_id = 1,resFile = advisory_circulators_sort_list,   description =提供方法,程序和方法等指导   符合法规和要求的做法。,   数据筒= 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);
                }

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

TAG_RES_FILE未在此方法中声明,因此它可能是常量。 为了表明它是正确的,尝试调试这个方法,看看它是否根据你的期望而改变。

实际上,在整个方法中,您甚至不会查看最终用户点击的项目,而不是通过视图的标记而不是项目的位置。我也没有看到你所谈到的地图的任何用法。