1

これはSO Q hereの続きですが、まだ何かが欠けています。

リスト ビューの JSONObject からマップされたアイテムを取得する方法がわかりません。HashMap キーの値は次のとおりです。

map.put(TAG_RES_FILE, resFile);

そして、その文字列を私のonItemClick(){int passResFile = getResources().getIdentifier(TAG_RES_FILE, "raw", "com.andaero.app");}

以下のメソッドにタグ名を入れることで、システムはそのアイテムの位置から自動的にそれを引き出すと思いました-明らかにそうではありません。では、どうやって手に入れるの??ありがとうございます。

編集: log.i() を追加して、クリックされた位置にある値を確認すると、次のように返されます。

getIdentifier(11925): {isRawRes=true, title=Advisory Circulators, 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);
                }
4

2 に答える 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);
于 2012-06-13T00:31:16.567 に答える
0

このメソッドでは TAG_RES_FILE は宣言されていないので、おそらく定数です。それが正しいことを示すには、このメソッドをデバッグして、期待どおりに変化するかどうかを確認してください。

実際、このメソッド全体では、ビューのタグやアイテムの位置を介してではなく、エンド ユーザーがクリックしたアイテムを確認することさえありません。また、あなたが話したマップの使用法も見当たりません。

于 2012-06-12T20:55:31.523 に答える