1

リストビューをクリックして新しいアクティビティを渡すことができません。この問題を解決する方法を教えてください。

ここに私のコード

// set UI
        setContentView(R.layout.show_permission);

        //get list from background
        show = getListView();

        //object for permission list
        permission_list = new ArrayList<HashMap<String,String>>();

        // get uid from main activity
        Intent i = getIntent();
        uid = i.getStringExtra(TAG_UID);

        // get data from background thread
        new GetPermission().execute();



        show.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // TODO Auto-generated method stub
                //getting item from list Item
                String project_id = ((TextView) view.findViewById(R.id.report_id)).getText().toString(); <---error here
                String project_name = ((TextView) view.findViewById(R.id.pro_name)).getText().toString();

                Intent in = getIntent();
                //send report_id to next activity
                in.putExtra(TAG_PROJECT_ID, project_id);
                in.putExtra(TAG_PROJECT_NAME, project_name);
                in.putExtra(TAG_UID, uid);
                setResult(100, in);

                finish();
            }
        });

そしてここで猫の表示をログに記録します

    09-25 15:41:27.510: E/AndroidRuntime(1457): FATAL EXCEPTION: main
09-25 15:41:27.510: E/AndroidRuntime(1457): java.lang.NullPointerException
09-25 15:41:27.510: E/AndroidRuntime(1457):     at com.example.androidhive.ProjectPermission$1.onItemClick(ProjectPermission.java:82)
09-25 15:41:27.510: E/AndroidRuntime(1457):     at android.widget.AdapterView.performItemClick(AdapterView.java:298)
09-25 15:41:27.510: E/AndroidRuntime(1457):     at android.widget.AbsListView.performItemClick(AbsListView.java:1086)
09-25 15:41:27.510: E/AndroidRuntime(1457):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:2855)
09-25 15:41:27.510: E/AndroidRuntime(1457):     at android.widget.AbsListView$1.run(AbsListView.java:3529)
09-25 15:41:27.510: E/AndroidRuntime(1457):     at android.os.Handler.handleCallback(Handler.java:615)
09-25 15:41:27.510: E/AndroidRuntime(1457):     at android.os.Handler.dispatchMessage(Handler.java:92)
09-25 15:41:27.510: E/AndroidRuntime(1457):     at android.os.Looper.loop(Looper.java:137)
09-25 15:41:27.510: E/AndroidRuntime(1457):     at android.app.ActivityThread.main(ActivityThread.java:4745)
09-25 15:41:27.510: E/AndroidRuntime(1457):     at java.lang.reflect.Method.invokeNative(Native Method)
09-25 15:41:27.510: E/AndroidRuntime(1457):     at java.lang.reflect.Method.invoke(Method.java:511)
09-25 15:41:27.510: E/AndroidRuntime(1457):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
09-25 15:41:27.510: E/AndroidRuntime(1457):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-25 15:41:27.510: E/AndroidRuntime(1457):     at dalvik.system.NativeStart.main(Native Method)

手伝ってくれてありがとう!

4

5 に答える 5

1

の一つ

((TextView) view.findViewById(R.id.report_id)).getText().toString();

無効です。

  • view : 意味がありません
  • findViewById(R.id.report_id)) : このビューがアイテム レイアウトに存在しますか?
  • getText() : report_id ビューのテキストは null にすることができます
于 2012-09-25T08:50:05.133 に答える
0

使用する代わりに

String project_id = ((TextView) view.findViewById(R.id.report_id)).getText().toString();

これを試して :

mTextView = (TextView)findViewById(R.id.report_id);

String project_id = mTextView.getText().toString();

于 2012-09-25T08:50:17.177 に答える
0

tvというテキストビュー変数を作成し、次に

tv = (TextView)findViewById(R.id.report_id);

'tv' を ID に追加したら、次のコマンドを使用して、そこからテキストを取得してみてください。

文字列 str = tv.getText().toString();

「Toast」に文字列「str」を表示して、null 値を保持していないかどうかを調べます。それが機能しない場合は、コードをここに投稿してください。

于 2012-09-25T09:04:08.153 に答える
0

すべての返信に感謝します ここで修正する解決策を見つけました

setContentView(R.layout.show_permission);

        ListView lv = getListView();

        Intent i = getIntent();
        uid = i.getStringExtra(TAG_UID);


        //report list
        permission_list = new ArrayList<HashMap<String,String>>();
        //load report in background
        new GetPermission().execute();

        // listView OnClicklistener
        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
                // TODO Auto-generated method stub
                //getting item from list Item
                String project_name = ((TextView) view.findViewById(R.id.pro_name)).getText().toString();

                // pass data to edit
                Intent edit = new Intent(getApplicationContext(), TimeReport.class);

                //send report_id to next activity
                edit.putExtra(TAG_PROJECT_NAME, project_name);
                edit.putExtra(TAG_UID, uid);

                startActivityForResult(edit, 100);
            }
于 2012-09-26T00:40:44.770 に答える
0

次のアプローチを使用してみてください。

  String project_id = ((TextView) view.getChildAt(index of project id view)).getText().toString(); 

  String project_name = ((TextView) view.getChildAt(index of project name view)).getText().toString();

たとえば、プロジェクト ID テキスト ビューがリスト アイテム ビューの最初のビューである場合、プロジェクト ID0のインデックスとして渡します。

于 2012-09-25T11:29:32.480 に答える