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)中滚动浏览日子时,它并不流畅!我检查了问题所在,这不是我确定字符串应该是什么的方式,它实际上是setText()处理程序中的。评论那部分 uit 一切都很好。在此处设置硬编码文本 ( dayOfWeekTextView.setText("SOMETHING');) 也会出现同样的问题。它使DatePicker.

真的setText()有那么大的动作吗?Wunderlist 显示一周中的哪一天,它运行顺利,但我就是不知道他们是如何做到的。

我只在我的HTC One X. 任何人的想法?

编辑:

我发现了为什么它在 Wunderlist 中很流畅!我使用的是和他们一样的DialogFragment。您可以在对话框上设置标题,这就是 Wunderlist 使用的而不是 TextView。所以我要使用它(看起来也更好;))

因此,在执行 'getDialog().setTitle(dayOfWeek)' 时没有问题。问题仍然存在:为什么 setText 在 UI 线程上这么慢......?

4

4 回答 4

4

糟糕的性能可能是重新计算布局的结果。如果 textview 宽度是 wrap-content,那么每次文本更改时,布局都会更新。尝试修复 textview 的宽度。

于 2013-08-25T07:59:31.127 回答
3

解决方案 一个非常性感和肮脏的解决方案是创建 7TextView并切换其中一个的可见性。直到一周延长到 8 天之前,这种方法应该会以更好的性能工作。


在单独的说明中,这可能是由于您的 textview 的布局参数。您可能想给它一些额外的空间,或者换句话说,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 回答