由于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我)时,它并不顺利!我检查问题是什么,这不是我确定String应该是什么的方式,它实际上是Handler中的setText()
。评论那部分uit,一切都很好。同样在那里设置硬编码文本(dayOfWeekTextView.setText("SOMETHING');
)会产生同样的问题。它抖动了DatePicker
。
setText()
真的那么大吗?奇妙清单显示了星期几,并且运行平稳,但我无法知道他们是如何做到的。
我只在HTC One X
上测试了它。
有人有想法吗?
编辑:
我发现了为什么它在Wunderlist中很顺利!我使用的是DialogFragment。您可以在对话框上设置标题,这是Wunderlist使用的而不是TextView。所以我将使用它(并且看起来也更好;))
所以当做'getDialog()。setTitle(dayOfWeek)时,没有问题。问题仍然存在:为什么setText在UI线程上变得缓慢......?
答案 0 :(得分:3)
<强>解强>
一个非常性感和肮脏的解决方案是创建7 TextView
并切换其中一个的可见性。直到一周延长到8天的那一天,这种方法应该有更好的表现。
另外,这可能是由于textview的布局参数所致。您可能想给它一些额外的空间,换句话说,setText不应该产生布局。我不确定是否会发生这种情况。
答案 1 :(得分:3)
糟糕的表现可能是重新计算布局的结果。如果textview宽度是wrap-content,则每次文本更改时,布局都会更新。 尝试修复textview的宽度。
答案 2 :(得分:0)
尝试以下格式:
t1.setText(""+string_name);
我使用这种格式在TextView和EditText中设置Text
答案 3 :(得分: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 ”,则会抛出资源未找到异常。