2012-04-16 14 views
0

私のアプリケーションの現在の実装に問題があります。 asynctask onActivityCreatedを実行しますが、ユーザーが単に電話の向きを変更した場合、これを行うことには興味がありません。ユーザーが携帯電話の向きを変更したときに非災害の非同期呼び出しが行われないようにする適切な方法は何ですか?アプリケーションが方向スイッチを切り替えるたびにAsyncTaskを実行する

ここには2つのメソッド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"宣言を使用していることを停止する簡単な方法がありますこの属性はのManifestファイルにあります。

これを使用せず、オリエンテーションチェンジを自分でコードで処理することをお勧めします。

onRetainNonConfigurationInstance()を使用して完全なチュートリアルを実行すると、this Blogにアクセスできます。開発者サイトのread here

+0

ありがとうございました。ブログの投稿はとても役に立ちました。 – CodePrimate

+0

私はこの銃を飛ばしたようです。 onRetainNonConfigurationInstance()は、それを上書きしようとしているクラスがFragmentを継承しているため、存在しません。提案? – CodePrimate

0

ちょうどあなたの活動のためのmanifeastファイル

アンドロイドでこれを追加します。configChanges = "keyboardHidden |オリエンテーション"

0

電話機の向きが変わると、現在のアクティビティが破棄され、新しいリソース(存在する場合)が新しいものが作成されます。それがAndroidのデフォルトの動作ですしかし、マニフェストのアクティビティにandroid:configChanges="orientation"を追加することで、向きの変更を手動で処理することをVMに伝えることで回避できます。

関連する問題