2013-05-16 4 views
0

Я пытаюсь просмотреть диалоговое окно с переключателями, но когда я нажал на диалоговое окно с предупреждением кнопки, он никогда не появляется. Ниже приведен код. Пожалуйста, дайте мне знать, есть ли альтернативное решение. Этот образец был взят из API Demos.Показывать AlertDialog при нажатии кнопки

public class MainPage extends Activity{ 
Button start; 
private static final int DIALOG_SINGLE_CHOICE = 1; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mainpage); 
    start = (Button) findViewById(R.id.start); 
    start.setBackgroundResource(R.drawable.read); 
    start.setOnClickListener(new View.OnClickListener() { 
     @SuppressWarnings("deprecation") 
     public void onClick(View v) { 

      showDialog(DIALOG_SINGLE_CHOICE); 

     } 
    }); 

} 

@Override 
@Deprecated 
protected Dialog onCreateDialog(int id) { 
    id = DIALOG_SINGLE_CHOICE; 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle("Choose your option"); 
    builder.setSingleChoiceItems(R.array.Baani, 0, new OnClickListener() { 

     public void onClick(DialogInterface dialog, int which) { 
      // TODO Auto-generated method stub 

     } 
    }) 
    .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 

        /* User clicked Yes so do some stuff */ 
       } 
      }) 
      .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 

        /* User clicked No so do some stuff */ 
       } 
      }) 
      .create(); 
    return super.onCreateDialog(id); 
     } 
    } 
} 

ответ

2

Создать эту функцию и использовать функцию showAskDialog() в случае щелчка

private void showAskDialog() { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setTitle("DialogTitle").setMessage("DialogMessage").setCancelable(true).setSingleChoiceItems(R.array.Baani, 0, new OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        // TODO Auto-generated method stub 

       } 
       }).setNegativeButton("No", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 

        dialog.cancel(); 
       } 
      }).setPositiveButton("YES", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 

        dialog.cancel(); 
       } 
      }); 
    // before @TronicZomB advice 
    //AlertDialog alert = builder.create(); 
    //alert.show(); 
    // after @TronicZomB advice 
    builder.show(); 
} 
+1

' .create() 'не нужно. Вызов '.show()' на Builder создаст его и покажет его в одной строке кода. Единственная причина использовать '.create()' была бы так, чтобы вы могли вызывать '.show()' несколько раз, где, но в этой ситуации это не нужно. – TronicZomB

1

Вы должны заменить return super.onCreateDialog(id); с return builder.show();. .create() создаст диалоговое окно предупреждения от строителя, но не отобразит этот диалог. .show() создаст диалог от строителя и покажет его на экране.

Я также считаю, что int id может быть ненужным. Вы можете попробовать следующий код и он должен работать для вас:

public class MainPage extends Activity{ 
Button start; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 

super.onCreate(savedInstanceState); 
setContentView(R.layout.mainpage); 
start = (Button) findViewById(R.id.start); 
start.setBackgroundResource(R.drawable.read); 
start.setOnClickListener(new View.OnClickListener() { 
    @SuppressWarnings("deprecation") 
    public void onClick(View v) { 

     showDialog(DIALOG_SINGLE_CHOICE); 

    } 
}); 

} 

@Override 
public Dialog onCreateDialog() { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle("Choose your option"); 
    builder.setSingleChoiceItems(R.array.Baani, 0, new OnClickListener() { 

     public void onClick(DialogInterface dialog, int which) { 
      // TODO Auto-generated method stub 

     } 
    }) 
    .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 

        /* User clicked Yes so do some stuff */ 
       } 
      }) 
      .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 

        /* User clicked No so do some stuff */ 
       } 
      }); 
     return builder.show(); 
     } 
    } 
} 
0

Вы делаете это неправильно внутри onCreateDialog().

Во-первых, вы не должны делать id = DIALOG_SINGLE_COICE, но тест id значение, если оно равно DIALOG_SINGLE_CHOICE. * Если да, то создайте Dialog с AlertDialog.Builder и верните builder.create(). * Если нет, верните super.onCreateDialog(id).

Но этот метод устарел, вместо этого вы должны использовать DialogFragment.

+0

'.create()' не будет показывать диалог. Вам нужно вернуть 'builder.show()' в ваш * * If yes ... " – TronicZomB

0
public class MainActivity extends Activity implements OnClickListener{ 
private Button button; 
private static final int DIALOG_SINGLE_CHOICE = 1; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    button = (Button) findViewById(R.id.button); 
    button.setOnClickListener(this); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.button: 
     showDialog(DIALOG_SINGLE_CHOICE); 
     break; 

    default: 
     break; 
    } 
} 

@Override 
@Deprecated 
protected Dialog onCreateDialog(int id) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle("Choose your option"); 
    builder.setSingleChoiceItems(R.array.Baani, 0, new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      // TODO Auto-generated method stub 
     } 

    }).setPositiveButton("OK", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 

      /* User clicked Yes so do some stuff */ 
     } 
    }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 

      /* User clicked No so do some stuff */ 
     } 
    }).create().show(); 
    return super.onCreateDialog(id); 
} 
}