2013-02-27 10 views
18

私はこれについて多くの投稿を読んだが、このケースに該当するものは見つかりませんでした。ダイアログフラグメントから文字列を返す

私は時間ピッカーのダイアログを持っており、整数値を文字列にまとめると、この文字列をメインアクティビティに戻す必要があります。

この文字列値は、ボタンのテキストを設定するために使用されます。

誰かがこれで私を助けることができたら、それは最も高く評価されます。

ダイアログ断片

public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener { 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // Use the current time as the default values for the picker 
     final Calendar c = Calendar.getInstance(); 
     int hour = c.get(Calendar.HOUR_OF_DAY); 
     int minute = c.get(Calendar.MINUTE); 

     // Create a new instance of TimePickerDialog and return it 
     return new TimePickerDialog(getActivity(), this, hour, minute, DateFormat.is24HourFormat(getActivity())); 
    } 

    public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
     // Do something with the time chosen by the user 
     String Time =Integer.toString(hourOfDay) + " : " + Integer.toString(minute); 
    } 
} 

コード

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_second); 


     Button btn = (Button) findViewById(R.id.start_time_button); 
     Button.setText(Time); 


    } 

答えて

48

ありがとう好ましい方法は、Fragmentからの信号を取得するためにコールバックを使用することです。また、これはAndroidで提案されている推奨方法ですCommunicating with the Activity

たとえば、DialogFragmentの場合は、インターフェイスを追加して登録してください。

public static interface OnCompleteListener { 
    public abstract void onComplete(String time); 
} 

private OnCompleteListener mListener; 

// make sure the Activity implemented it 
@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    try { 
     this.mListener = (OnCompleteListener)activity; 
    } 
    catch (final ClassCastException e) { 
     throw new ClassCastException(activity.toString() + " must implement OnCompleteListener"); 
    } 
} 

今、あなたのDialogFragmentで今すぐあなたのActivity

public class MyActivity extends Activity implements MyDialogFragment.OnCompleteListener { 
    //... 

    public void onComplete(String time) { 
     // After the dialog fragment completes, it calls this callback. 
     // use the string here 
    } 
} 

にこのインタフェースを実装し、ユーザーが[OK]ボタンをクリックしたときに、コールバックを経由して戻ってActivityにその値を送信します。

public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
    String time = Integer.toString(hourOfDay) + " : " + Integer.toString(minute); 
    this.mListener.onComplete(time); 
} 
+0

ご回答いただきありがとうございます。唯一の唯一のビットは、アクティビティのクラスです。私は 'FragmentActivity'のために何を入れますか – user2059311

+0

'FragmentActivity'はちょうどあなたの' Activity'です。これを実装することもできます。私は答えを更新します。 – Kirk

+0

私はそれがほとんど動作していると思いますが、行の最後のエラーが1つあります – user2059311

関連する問題