1

私のアプリでは、longCLick で次の方法で AlertDialog を作成します。

     @Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DIALOG_TEXT_ENTRY:
        // This example shows how to add a custom layout to an AlertDialog
        LayoutInflater factory = LayoutInflater.from(this);
        final View textEntryView = factory.inflate(R.layout.custom_dialog, null);
        final EditText cdet11 = (EditText) findViewById(R.id.cdet1);
        final TextView tv11 = (TextView) findViewById(R.id.buname1);
        return new AlertDialog.Builder(Main.this)
            .setIcon(R.drawable.icon)
            .setTitle("Title")
            .setView(textEntryView)
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    android.os.Debug.waitingForDebugger();
                    String string1 = getSharedPreferences("PREFERENCE", MODE_PRIVATE).getString("butname11", "");
                    String ss1 = cdet11.getText().toString();
                    getSharedPreferences("PREFERENCE", MODE_PRIVATE)
                    .edit()
                    .putString("butname11", ss1 )
                    .commit();
                    String string11 = getSharedPreferences("PREFERENCE", MODE_PRIVATE).getString("butname11", "");
                    tv11.setText(string11);
                    /* User clicked OK so do some stuff */
                }
            })
            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {

                    /* User clicked cancel so do some stuff */
                }
            })
            .create();
    }
    return null;
} 

しかし、私はそのようなエラーを取ります...

10-05 14:54:25.319: E/AndroidRuntime(6331): java.lang.NullPointerException
10-05 14:54:25.319: E/AndroidRuntime(6331):     at com.home.Main$3.onClick(Main.java:166)
10-05 14:54:25.319: E/AndroidRuntime(6331):     at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158)
10-05 14:54:25.319: E/AndroidRuntime(6331):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-05 14:54:25.319: E/AndroidRuntime(6331):     at android.os.Looper.loop(Looper.java:144)
10-05 14:54:25.319: E/AndroidRuntime(6331):     at android.app.ActivityThread.main(ActivityThread.java:4937)
10-05 14:54:25.319: E/AndroidRuntime(6331):     at java.lang.reflect.Method.invokeNative(Native Method)
10-05 14:54:25.319: E/AndroidRuntime(6331):     at java.lang.reflect.Method.invoke(Method.java:521)
10-05 14:54:25.319: E/AndroidRuntime(6331):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
10-05 14:54:25.319: E/AndroidRuntime(6331):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
10-05 14:54:25.319: E/AndroidRuntime(6331):     at dalvik.system.NativeStart.main(Native Method) 

エラー発生日

String ss1 = cdet11.getText().toString(); 

どうしたの?

4

2 に答える 2

3

これらに View 参照を追加し、

 final EditText cdet11 = (EditText) findViewById(R.id.cdet1);
        final TextView tv11 = (TextView) findViewById(R.id.buname1);

このような、

 final EditText cdet11 = (EditText)textEntryView. findViewById(R.id.cdet1);
        final TextView tv11 = (TextView)textEntryView. findViewById(R.id.buname1);

要素が見つかるビューを提供する場合にのみ、Android はどこを探すべきかを認識します。

そうでない場合は、Activity の ContentView を調べて、NPE をスローします。

于 2012-10-05T11:02:23.210 に答える
3

このように使う

  private void CreateAlertDialog (final String type) {       

    AlertDialog.Builder alert = new AlertDialog.Builder(this);

    alert.setTitle("Title");
    alert.setMessage("Message");

    // Set an EditText view to get user input 
    final EditText input = new EditText(this);
    alert.setView(input);

    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            String value = input.getText().toString();

        }
    });

    alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {

        }
    });
    alert.show();

}
于 2012-10-05T11:12:33.000 に答える