5

Android は日付の表示をサポートしていないため、レイアウトに TextView を追加しました。

DatePicker に onDateChangedListener を配置しました。日付が変わると、曜日を決定し、ハンドラーを介して設定して、UI スレッドで確実に行われるようにします。

// this is being called when the date changes on the DatePicker
public void onDateChanged(DatePicker view, final int year,
                final int monthOfYear, final int dayOfMonth) {
    String dayOfTheWeek = null;

    // some code here to set the 'dayOfTheWeek' string

    h.sendMessage(h.obtainMessage(0, dayOfTheWeek));
}

final Handler h = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        dayOfWeekTextView.setText((String)msg.obj);
    }
};

私の問題: ウィジェット ( Android 4.0 U I) で日をスクロールすると、スムーズではありません! 問題の内容を確認しましたが、それは String がどうあるべきかを判断する方法ではなく、実際setText()には Handler にあります。その部分にコメントすると、すべて問題ありません。また、そこにハードコードされたテキストを設定すると ( dayOfWeekTextView.setText("SOMETHING');)、同じ問題が発生します。をジッターしDatePickerます。

そんなにsetText()大した行動なの?Wunderlist には曜日が表示されており、スムーズに実行されますが、どのように実行されているのかわかりません。

でのみテストしましたHTC One X。誰でもアイデアはありますか?

編集:

Wunderlistで滑らかな理由がわかりました!私はそれらと同じDialogFragmentを使用しています。ダイアログにタイトルを設定できます。これは Wunderlist が TextView の代わりに使用するものです。だから私はそれを使うつもりです(そして見た目も良くなります;))

したがって、「getDialog().setTitle(dayOfWeek)」を実行しても問題ありません。まだ問題が残っています: UI スレッドで setText が遅いのはなぜですか?

4

4 に答える 4

4

パフォーマンスの低下は、レイアウトの再計算の結果である可能性があります。テキストビューの幅がコンテンツの折り返しの場合、テキストが変更されるたびにレイアウトが更新されます。テキストビューの幅を修正してみてください。

于 2013-08-25T07:59:31.127 に答える
3

解決 策非常にセクシーで汚い解決策は、7TextView秒を作成し、そのうちの1つの表示を切り替えることです。1週間が8日に延長される日まで、このアプローチははるかに優れたパフォーマンスで機能するはずです。


別の注意点として、これはテキストビューのレイアウトパラメータが原因である可能性があります。スペースを追加したい場合があります。つまり、setTextによってレイアウトが発生しないようにする必要があります。それが起こっているかどうかはわかりません。

于 2013-02-05T09:24:26.210 に答える
0

このフォーマットを試してください:

t1.setText(""+string_name);

TextView と EditText の両方でテキストを設定するためにこの形式を使用しました

于 2013-01-28T07:07:56.540 に答える
0

あなたが述べたのと同様の「ハンドラー」アプローチを使用して同じことを実装しようとしましたが、応答性も非常に優れていることがわかりました。

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

final DatePicker dp = (DatePicker)findViewById(R.id.datePicker1);

        dp.init(2012, 6, 17, new OnDateChangedListener() {

            @Override
            public void onDateChanged(DatePicker view, int year, int monthOfYear,
                    final int dayOfMonth) {

                handler.post(new Runnable() {

                    @Override
                    public void run() {

                        TextView tv = (TextView) findViewById(R.id.textView1);

                        // some code here to set the 'dayOfTheWeek' string


                        tv.setText(Integer.toString(dayOfTheWeek));   // (if you want to set a number of day instead of its name)

                                           //  OR

                        tv.setText(dayOfTheWeek);   

                    }
                });

            }
        });

ここでの問題は、Wrapper クラスIntegerを使用して int 値を String に変換することです。' plane int 'を渡すと、 Resource Not Found例外がスローされます。

于 2013-02-11T09:07:49.203 に答える