0

以下のコードを使用して警告ダイアログを設定しようとしていますが、この時点でアプリがクラッシュし続けます。明らかな間違いはありますか?

AlertDialog alertDialog = new AlertDialog.Builder( 
    Crossword1.this).create(); 
    alertDialog.setTitle("Well done, the crossword is complete!");
    alertDialog.setMessage("well done cuz");
    alertDialog.setIcon(R.drawable.tick);
    alertDialog.setButton("OK", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 

        } 
    });
alertDialog.show();

以下の Logcat では、メモリについて言及していますが、アラート ダイアログ ボックスがメモリ エラーを引き起こす理由はわかりません (アラート ダイアログ ボックスがコメント アウトされている場合、アプリは正常に動作します)。

 12-21 17:57:33.180: D/BounceScrollRunnableDefault(24966): start(1554.2593), mBounceExtent:0.0
    12-21 17:57:33.180: D/BounceScrollRunnableDefault(24966): mBounceExtentCoef = -205.16223
    12-21 17:57:34.335: D/BounceScrollRunnableDefault(24966): start(0.0), mBounceExtent:-11.0
    12-21 17:57:34.335: D/BounceScrollRunnableDefault(24966): mBounceExtentCoef = -11.0
    12-21 17:57:34.555: D/BounceScrollRunnableDefault(24966): start(0.0), mBounceExtent:-19.245642
    12-21 17:57:34.555: D/BounceScrollRunnableDefault(24966): mBounceExtentCoef = -19.245642
    12-21 17:57:35.505: I/dalvikvm-heap(24966): Clamp target GC heap from 65.159MB to 64.000MB
    12-21 17:57:35.505: D/dalvikvm(24966): GC_FOR_ALLOC freed 580K, 2% free 64467K/65479K, paused 20ms
    12-21 17:57:35.505: I/dalvikvm-heap(24966): Forcing collection of SoftReferences for 2903056-byte allocation
    12-21 17:57:35.545: I/dalvikvm-heap(24966): Clamp target GC heap from 65.151MB to 64.000MB
    12-21 17:57:35.545: D/dalvikvm(24966): GC_BEFORE_OOM freed 9K, 2% free 64458K/65479K, paused 27ms
    12-21 17:57:35.545: E/dalvikvm-heap(24966): Out of memory on a 2903056-byte allocation.
4

4 に答える 4

0

私はあなたの問題があなたがそれをしている方法から来ているかもしれないと思います。私はAndroidドキュメントからこれを取得します

// 1. Instantiate an AlertDialog.Builder with its constructor
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

// 2. Chain together various setter methods to set the dialog characteristics
    builder.setMessage(R.string.dialog_message)
       .setTitle(R.string.dialog_title);

// 3. Get the AlertDialog from create()
    AlertDialog dialog = builder.create();

のように作成しているときAlertDialog alertDialog = new AlertDialog.Builder( Crossword1.this).create();は、実際には何も設定していません。最後に作成する必要があります。次にそれを表示します。

于 2012-12-21T07:03:56.670 に答える
0

ビューをUIに割り当てる前に、ダイアログを作成します。エラーはここにある可能性があります::

AlertDialog alertDialog = new AlertDialog.Builder( 
    Crossword1.this).create(); 

このようにしてください。

AlertDialog.Builder builder= new AlertDialog.Builder(
                    Crossword1.this)
                                        .setTitle("Well done, the crossword is complete!");
                                        .setMessage("....")
                    .setCancelable(false)
                    .setPositiveButton("Ok", new   DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
                            //ur code
                        }
                    });
            return builder.create();

確認してください。

于 2012-12-21T07:04:36.177 に答える
0

答えてくれた@AndroSelvaに感謝します メモリの問題はアイコンが原因です。コードのアイコン行をコメントアウトすると、ダイアログは正常に実行されます。

このようにアイコンのサイズを変更すると、すべてが正常に実行されます

    //---scales the alertdialog items to the right size---
    Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(), R.drawable.tick); 
    int width = bitmapOrg.getWidth(); 
    int height = bitmapOrg.getHeight(); 
    int newWidth = 200; 
    int newHeight = 200;

    // calculate the scale - in this case = 0.4f 
    float scaleWidth = ((float) newWidth) / width;
    float scaleHeight = ((float) newHeight) / height; 

    // create matrix for the manipulation
    Matrix matrix = new Matrix();  

    // resize the bit map
    matrix.postScale(scaleWidth, scaleHeight);

    // rotate the Bitmap
    matrix.postRotate(0);  

    // recreate the new Bitmap 
    Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0, width, height, matrix, true);   

    // make a Drawable from Bitmap to allow to set the BitMap  // to the ImageView, ImageButton or what ever 
    BitmapDrawable bmd = new BitmapDrawable(resizedBitmap);
于 2012-12-21T07:08:19.530 に答える
0

このコードを試してください..

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                Crossword1.this);
               // set title
               alertDialogBuilder.setTitle("Well done, the crossword is complete!");
               // set dialog message
               alertDialogBuilder
                .setMessage("well done cuz")
                .setCancelable(false)
                .setPositiveButton("Yes",new DialogInterface.OnClickListener() {
                 public void onClick(DialogInterface dialog,int id) {
                  // if this button is clicked, 
                  // DO YOUR CODE HERE

                  //Here I start new activity
                  Intent i = new Intent(MainActivity.this, abcd.class);
                  startActivity(i);
                 }
                  })
                .setNegativeButton("No",new DialogInterface.OnClickListener() {
                 public void onClick(DialogInterface dialog,int id) {
                  // if this button is clicked, just close
                  // the dialog box and do nothing
                  dialog.cancel();
                 }
                });
                // create alert dialog
                AlertDialog alertDialog = alertDialogBuilder.create();
                // show it
                alertDialog.show();

詳しくはこちらのブログ参照

于 2012-12-21T07:08:34.693 に答える