2012-04-16 1 views
0

У меня возникла проблема с текущей реализацией моего приложения. Я выполняю asynctask onActivityCreated, но я не заинтересован в этом, если пользователь просто меняет ориентацию телефона. Каков надлежащий способ убедиться, что асинхронные вызовы unnescesarry не выполняются, когда пользователь меняет ориентацию телефона?Приложение, выполняющее 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(); 
} 

ответ

1

Существует простой способ, чтобы остановить это, используя,

android:configChanges="orientation" DECLARE этот атрибут в файле Manifest для этого Activity.

Рекомендовано, чтобы не использовать это и обрабатывать ориентацию. Измените сами по себе код.

с помощью onRetainNonConfigurationInstance() для полного обучения вы можете пройти this Blog. также read here сайт разработчика.

+0

Спасибо. Сообщение в блоге было очень полезно. – CodePrimate

+0

Похоже, я прыгнул с пистолета на этом. onRetainNonConfigurationInstance() не существует, потому что класс, из которого я пытаюсь его переопределить, расширяет фрагмент. Предложения? – CodePrimate

0

Просто добавьте это в manifeast файл для вашей деятельности

андроида: configChanges = "keyboardHidden | ориентации"

0

Когда телефон меняет ориентацию, текущая активность уничтожается, а новый создается с новыми ресурсами (если есть). Так что это поведение Android по умолчанию. Однако вы можете избежать этого, указав виртуальной машине, что вы будете обрабатывать изменения ориентации вручную, добавив android:configChanges="orientation" в свою активность в манифесте.

Смежные вопросы