4

ですから、私はしばらくこれに取り組んでいます、そして私はそれを理解することができないようです。私はAndroid開発にかなり慣れていないので、ご容赦ください。私はDatepickerの作成にあまり慣れていなかったので、コツをつかむためだけに非推奨の方法で作成することを学びました。このチュートリアルを使用して、私をスピードアップさせました。

http://developer.android.com/resources/tutorials/views/hello-datepicker.html

しかし、今は主に非推奨のコードを使用しないように変更する必要があるので、周りを見回して、2つのチュートリアルを見つけました。主にこれです。

http://www.kylebeal.com/2011/11/android-datepickerdialog-and-the-dialogfragment/

問題は、意味をなさないコードがあることです。主にこの部分:

//create new DateDialogFragment
DateDialogFragment ddf = DateDialogFragment.newInstance(this, R.string.set_date, date);

ddf.setDateDialogFragmentListener(new DateDialogFragmentListener() {

    @Override
    public void dateDialogFragmentDateSet(Calendar date) {
        // update the fragment
        mDateDetailFragment.updateDate(date);
    }
});

ddf.show(getSupportFragmentManager(), "date picker dialog fragment");

それは、それが実行されているアクティビティクラスで実行されているものであると想定されます。したがって、コードの残りの部分で何が起こっているのかを把握し、おそらく役立つので、残りの部分を自由に見てください。コードは基本的に、元のコードとほぼ同じルートをたどっていshowDialog()ます。DialogFragmentを使用するという明らかな例外を除いて、を実装DatePickerDialog.onDateSetListenerし、新しいを返します。DatePickerDialogしかし、それは私が迷子になったところです。

その理由の一部は、新しいDatePickerDialogがどこに 返されるのかよくわからないためです。onCreateDialog()私が言ったコードを見ると、どちらも意味mDateDetailFragmentgetSupportFragmentManager()なく、インスタンス化されたり、他の場所に表示されたりすることはなかったため、チュートリアルコードを機能させることさえできません。Android Docには、使用する代わりにとのshowDialog()両方を使用する必要があるとDialogFragment記載されてFragmentManagerいますが、これもここでは実行されません。DialogFragmentのみ。

それで、タイトルのように、どのように私は非実用的な形でDatPickerを作ることができますか?リンクに私を送らないで、ここを見てと言ってください。私はそれをしました。私を信じてください。そうでない場合は、少なくとも私が見逃したことを説明してください。これは理にかなっています。onCreateDialog()また、メソッドがどこに送信するかを誰かが実際に教えてくれる場合はDatePickerDialog、それも非常に役立ちます。コードをコピーして貼り付けるのではなく、これらすべてを理解しようとしています(とにかく機能するわけではありません)。これを読むために時間を割いてくれてありがとう、そして何か説明が必要な場合は、尋ねてください。

4

3 に答える 3

4

投稿順に...\

1)はonCreateDialogダイアログをDialogFragmentに戻します。

2)その行についてはわかりませんmDateDetailFragment.updateDate(date);...彼はいくつかのコードを省略した可能性があると思います。 編集 それを見つけました、それは彼の完全なデモのためのzipファイルのクラスの1つにあります。

3)フラグメントマネージャーを使用しています(これはgetSupportFragmentManager()一部です):

ddf.show(getSupportFragmentManager(), "date picker dialog fragment");

そうは言っても、これが私がそれを行った方法です(私はDateSliderを使用していますが、その場所でDatepickerをサブスクライブするのはあなたにとって十分に簡単なはずです)。

DialogFragmentを呼び出すフラグメント/アクティビティで:

DialogFragment newFragment = new DateDialog();
newFragment.show(getFragmentManager(), "dialog"); 

そして私のDialogFragment:

public class DateDialog extends DialogFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    private DateSlider.OnDateSetListener mDateSetListener = new DateSlider.OnDateSetListener() {
        public void onDateSet(DateSlider view, Calendar selectedDate) {
            MemberAddFragment.startTxt.setText(String.format("%tB %te, %tY", selectedDate, selectedDate, selectedDate));
        }
    };

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        final Calendar c = Calendar.getInstance();  // Get calendar instance to use in DateSlider
        return new AlternativeDateSlider(getActivity(),mDateSetListener,c,null,null);  // return DateSlider dialog to DialogFragment
    }
}

これがあなたの混乱を解消するのに役立つことを願っています。

于 2012-06-13T06:58:24.430 に答える
3

私はこの質問が私のものであることを知っており、すでに答えがあります。しかし、私はこの同じ問題について助けを求めている他の人に自分の答えを追加したいと思いました。上記で提供したサンプルコードを2つのクラスに簡略化しました。チュートリアルを提供するのに十分親切だったKbealは素晴らしい仕事をしましたが、それは必要さえない情報で肥大化しすぎていました。そのため、ダイアログについて知っていること、Kbealのチュートリアルから理解できること、およびフラグメントについて行った調査から学んだことを使用して、GitHubのDatePickerDialogから実装を提供しました。

https://github.com/Zeroe31890/DateDialogFragment

正直に言うと、2つのクラス、1つのレイアウトをコピーして貼り付け、Androidマニフェストファイルを変更するだけで、すぐに実行できます。他のどのチュートリアルよりもはるかに簡単です。ああ、誰かがそれでもっとうまくできることがあれば、やってください。楽しみ!

于 2012-06-16T06:45:18.293 に答える
0

ここの投稿の著者: あなたはそれをすべて理解したようですね. これを見つける前に、私は自分の投稿であなたの質問に答えましたが、バラクはそれらにうまく答えています. サンプル アプリの完全なソースをまだダウンロードしていない場合は、ダウンロードしてください。まだ残っている空白を埋めるのに役立つと思います。

于 2012-06-13T15:45:45.937 に答える