3

デフォルトのコンストラクターに関するエラー メッセージについて、私は少し混乱しています。

私は2クラスMainActivityResultDialog. のいくつかのメソッドはMainActivity、新しいダイアログを作成し、 のカスタム コンストラクタに 2string を渡しResultDialogます。

ResultDialog伸びDialogFragmentます。そのため、独自のコンストラクターを定義しましたが、そのエラーが発生したときに、引数のないコンストラクターを作成しましたが、それでも許可されていません。

SOで少し検索しましたが、回答は、画面の回転がデフォルトのコンストラクターを使用して画面を破壊および再作成する可能性があることを説明していますが、それを解決する方法にはまだ答えていません。

エラーは、Avoid non-default constructors in fragment: use a default constructor plus Fragment#setArguments(Bundle) instead.

誰かがこれについて私を助けてください。私は少し混乱しています。私のResultDialogクラスの一部:

  public class ResultDialog extends DialogFragment {

private String message;//to hold the message to be displayed
private String title;//for alert dialog title

//constructor for the dialog passing along message to be displayed in the alert dialog
public ResultDialog(String message,String title){
    this.message = message;
    this.title = title;

}

public ResultDialog(){
    //default constructor
}
4

3 に答える 3

1

ダイアログでも同じことができます。リンク 独自のコンストラクターを宣言することはできません。ダイアログの新しいインスタンスを生成し、引数で文字列を渡すだけです。あなたの onCreate では、 getArguments().getString("key") でそれらをフェッチするだけです

これがお役に立てば幸いです

于 2013-10-05T10:34:39.050 に答える
1

別個のコンストラクターを定義する代わりに、パラメーターのないコンストラクターのみを用意し、setArguments(Bundle)メソッドを使用してデータを に渡すことをお勧めしますFragmentドキュメントによると:

Fragment のすべてのサブクラスには、パブリックの空のコンストラクターが含まれている必要があります。フレームワークは、必要に応じて、特に状態の復元中にフラグメント クラスを再インスタンス化することが多く、インスタンス化するためにこのコンストラクタを見つけることができる必要があります。空のコンストラクターが使用できない場合、状態の復元中に実行時例外が発生する場合があります。

を使用すると、を内部からsetArguments(Bundle)呼び出してデータを取得できます。getArguments()Fragment

于 2013-10-05T10:35:36.987 に答える