回答完这个问题之后,我对使用Android的AsyncTask类的get()方法的意义/用处产生了疑问.
public final Result get ()
Waits if necessary for the computation to complete, and then retrieves its result.
Run Code Online (Sandbox Code Playgroud)
基本上,AsyncTask类的同步解决方案,阻止(冻结)UI直到后台操作完成.
除了测试目的,甚至在那些情况下,我无法真正想到它实际上是一个很好的解决方案,但我可能是错的,所以我感到好奇.
如果您需要用户实际等到AsyncTask完成,您可以显示Dialog或ProgressDialog,在每个时刻都可以控制UI.我知道它不完全相同,但恕我直言,它比使用该get()方法更好的方法.
当我使用"HH"标志时android.text.format.DateFormat,它被解释为文字"HH".但是当我使用java.text.SimpleDateFormat它时,它被解释为2位数小时.他们为什么不同?
我不是在找工作替代品(我已经知道我必须使用kk而不是HH).我只是好奇为什么"HH"不被认可.
Java示例:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Calendar calendar = Calendar.getInstance();
String dateJava = new java.text.SimpleDateFormat(
"dd-MM-yyyy HH:mm:ss").format(calendar.getTime());
String dateAndroid = android.text.format.DateFormat.format(
"dd-MM-yyyy HH:mm:ss", calendar).toString();
TextView tvAndroid = (TextView) findViewById(R.id.tvAndroid);
TextView tvJava = (TextView) findViewById(R.id.tvJava);
tvAndroid.setText("Android: " + dateAndroid); //prints 26-05-2013 HH:36:34
tvJava.setText("Java: " + dateJava); //prints 26-05-2013 22:36:34
}
Run Code Online (Sandbox Code Playgroud)
输出是:
Android: 26-05-2013 HH:36:34
Java: 26-05-2013 22:36:34
Run Code Online (Sandbox Code Playgroud)
我希望两者都是 26-05-2013 22:36:34
Android的DateFormat有错误吗?
Java的SimpleDateFormat接受这些:
H Hour in day (0-23) Number …Run Code Online (Sandbox Code Playgroud) 我正在使用GridView来显示一些图像并且我遇到了问题,因为onClickListener不适用于第一个图像.我在SO处发现了一些其他问题同样的问题,但我不喜欢他们的"正确答案",因为他们大多采用相同的方法:
基本上,每次调用getview时都要实例化视图.这对于性能很糟糕,并且它们可能会在许多设备中面临内存不足的问题.
在我的例子中,我在GridView中显示位于assets文件夹中的子文件夹内的图像.
我的原始代码带有"第一项"问题(实际上,我的原始代码实现了视图模式,但这个更简单并面临同样的问题):
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(_activity);
} else {
imageView = (ImageView) convertView;
}
// get screen dimensions
AssetManager assetManager = _activity.getAssets();
InputStream assetIn = null;
try {
assetIn = assetManager.open(_assets_subdir + File.separator + _filePaths.get(position));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Bitmap image = BitmapFactory.decodeStream(assetIn);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setLayoutParams(new GridView.LayoutParams(imageWidth, imageWidth));
imageView.setImageBitmap(image);
// image view click …Run Code Online (Sandbox Code Playgroud)