新的Android API 22 getResources().getDrawable()
现已弃用.现在最好的方法是只使用getDrawable()
.
改变了什么?
android android-resources android-drawable android-5.1.1-lollipop
我的程序在后台线程中执行一些网络活动.在开始之前,它会弹出一个进度对话框.该对话框在处理程序上被关闭.这一切都很好,除非在对话框启动时屏幕方向发生变化(后台线程正在运行).此时,应用程序崩溃或死锁,或进入一个奇怪的阶段,在应用程序完全无法工作之前,直到所有线程都被杀死.
如何优雅地处理屏幕方向变化?
下面的示例代码大致匹配我的真实程序:
public class MyAct extends Activity implements Runnable {
public ProgressDialog mProgress;
// UI has a button that when pressed calls send
public void send() {
mProgress = ProgressDialog.show(this, "Please wait",
"Please wait",
true, true);
Thread thread = new Thread(this);
thread.start();
}
public void run() {
Thread.sleep(10000);
Message msg = new Message();
mHandler.sendMessage(msg);
}
private final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
mProgress.dismiss();
}
};
}
Run Code Online (Sandbox Code Playgroud)
堆:
E/WindowManager( 244): Activity MyAct has …
Run Code Online (Sandbox Code Playgroud) 我在新的材料设计Side Nav规范中看到,您可以在操作栏上和状态栏后面显示抽屉.我该如何实现呢?
从文档开始:
public void setRetainInstance(boolean retain)
控制是否在活动重新创建(例如从配置更改)中保留片段实例.这只能用于不在后栈中的片段.如果设置,则在重新创建活动时,片段生命周期会略有不同:
- onDestroy()不会被调用(但是onDetach()仍然会被调用,因为片段正在与其当前活动分离.
- 因为片段没有被重新创建,所以不会调用onCreate(Bundle).
- onAttach(Activity)和onActivityCreated(Bundle)仍将被调用.
我有一些问题:
片段是否也保留其视图,还是会在配置更改时重新创建?"保留"究竟是什么意思?
当用户离开活动时,片段是否会被销毁?
为什么它不适用于后端堆栈上的碎片?
哪个是使用此方法有意义的用例?
在我的Android应用程序中,我有两个活动类.我在第一个按钮上有一个按钮,我想在点击它时显示第二个按钮,但是我收到错误.以下是课程:
public class FirstActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button orderButton = (Button)findViewById(R.id.order);
orderButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(FirstActivity.this, OrderScreen.class);
startActivity(intent);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
单击按钮时应显示的第二个类,但从不执行:
public class OrderScreen extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.order);
Button orderButton = (Button) findViewById(R.id.end);
orderButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
如何创建一个显示第二个活动的按钮?
将活动添加到现有Android项目时,我手动创建一个新类 - 这是最佳/首选方式吗?其他人如何处理?
既然Honeycomb
又v4 Compatibility Library
可以使用AsyncTaskLoader
.据我所知,它AsyncTaskLoader
可以通过配置更改生存,如屏幕翻转.
是否建议使用AsyncTaskLoader
而不是AsyncTask
?是否LoaderManager
也参与其中?
但我没有找到任何关于如何正确使用的好例子AsyncTaskLoader
.文档也没有提供任何示例.谁能提供一些很好的例子.
关于initLoader
以下restartLoader
功能之间的差异,我完全迷失了LoaderManager
:
restartLoader
还会创建一个加载器(如果它不存在)("在此管理器中启动新的或重新启动现有的加载器"). 两种方法之间是否存在某种关系?打电话restartLoader
总是打电话initLoader
吗?我可以打电话restartLoader
而不必打电话initLoader
吗?是否保存以调用initLoader
两次刷新数据?我什么时候应该使用其中一个而且(重要的!)为什么?
对我来说,如果您有多个装载机,如何获得正确的光标并不清楚.让我们说你定义了两个不同的Loader:
getLoaderManager().initLoader(0,null,this);
getLoaderManager().initLoader(1,null,this);
Run Code Online (Sandbox Code Playgroud)
然后在onCreateLoader()中你根据id做不同的事情:
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle arg1) {
if (id==0){
CursorLoader loader = new CursorLoader(getActivity(),
MaterialContentProvider.CONTENT_URI,null,null,null,null);
}else{
CursorLoader loader = new CursorLoader(getActivity(),
CustomerContentProvider.CONTENT_URI,null,null,null,null);
};
return loader;
}
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.但是如何在onLoadFinished()中获得正确的光标,因为你没有得到任何id来识别正确的Cursoradapter光标.
@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) {
mycursoradapter1.swapCursor(cursor);
if(isResumed()){
setListShown(true);
}else {
setListShownNoAnimation(true);
}
}
//and where to get the cursor for mycursoradapter2
Run Code Online (Sandbox Code Playgroud)
或者我错了,这是在一个片段中获得两个不同cursoradapter的结果的错误方法.
我有两个活动A和B.我希望在活动A调用B时收缩动画,并在活动B调用A时最大化动画.我不需要动画xml文件.
当我们在Android中调用另一个Activity时,它会提供默认动画,然后调用缩小动画.
我想要的是不应该发生默认动画,我想要的动画应该发生.
我们可以在调用另一个Activity时实际给出动画吗?