我的应用程序的当前实现存在问题。我在onActivityCreated上执行asynctask,但如果用户只是改变手机的方向,我就不会对此感兴趣。当用户更改手机的方向时,确保不会发生异步呼叫的正确方法是什么?
以下是onActivityCreated和populateList的两种方法。 populateList被称为onPostExecute()。
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
userControl = new UserController(getSherlockActivity());
lv = (ListView)getView().findViewById(R.id.callforwardlist);
lv.setTextFilterEnabled(true);
list = new ArrayList<HashMap<String,String>>();
callForwardList = new SimpleAdapter(
getSherlockActivity(),
list,
R.layout.callforward_items,
new String[] { "line1","line2" },
new int[] { R.id.callforward_item_text, R.id.callforward_number } );
new PullInfoTask().execute();
lv.setAdapter( callForwardList );
lv.setOnItemClickListener(new OnItemClickListener() {
// *snip*
});
}
private void populateList()
{
cfinfo = userControl.GetCallForwardInfo();
if(Integer.parseInt( cfinfo[0]) == 1)
addItem("Viderestilling altid", cfinfo[1]);
else
addItem("Viderestilling altid", "Slået fra");
if(Integer.parseInt(cfinfo[2]) == 1)
addItem("Viderestilling ved optaget", cfinfo[3]);
else
addItem("Viderestilling ved optaget", "Slået fra");
if(Integer.parseInt(cfinfo[4]) == 1)
addItem("Viderestilling ved intet svar", cfinfo[5]);
else
addItem("Viderestilling ved intet svar","Slået fra");
// Timeout Item
addItem("Timeout",cfinfo[6]);
callForwardList.notifyDataSetChanged();
}
答案 0 :(得分:1)
有一种简单的方法可以停止使用,
android:configChanges="orientation"
在Manifest
文件中为Activity
声明此属性。
建议不要在代码中使用它并自行处理orientationChange。
使用onRetainNonConfigurationInstance()
获取完整教程,您可以浏览 this Blog 。在开发者网站上也 read here 。
答案 1 :(得分:0)
只需在活动的表现文件中添加
即可机器人:configChanges = “keyboardHidden |取向”
答案 2 :(得分:0)
当手机改变方向时,当前活动将被销毁,并使用新资源(如果有)创建新活动。这是Android的默认行为。但是,您可以通过向虚拟机告知您将通过向清单中的活动添加android:configChanges="orientation"
来手动处理方向更改来避免这种情况。