RunOnUiThread в фрагменте

Я пытаюсь преобразовать операцию в фрагмент. Знак ошибки на runOnUiThread . О прошлом:

GoogleActivityV2 распространяется из Activity. RunOnUiThread в классе ExecuteTask. Класс ExecuteTask вложен в действие.

(Запустите ok) сейчас:

GoogleActivityV2 распространяется от фрагмента. RunOnUiThread в классе ExecuteTask. Класс ExecuteTask вложен в действие. (Ошибка в runOnUiThread)

Вот мой код

 public class GoogleActivityV2 extends SherlockMapFragment implements OnMapClickListener , OnMapLongClickListener , OnCameraChangeListener , TextWatcher { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ View rootView = inflater.inflate(R.layout.activity_googlev2, container, false); Init(); adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_dropdown_item_1line); textView = (AutoCompleteTextView) getView().findViewById(R.id.autoCompleteTextView1); return rootView; } public void onCameraChange(CameraPosition arg0){ // TODO Auto-generated method stub } public void onMapLongClick(LatLng arg0){ llLoc = arg0; stCommand = "onTouchEvent"; lp = new ExecuteTask(); lp.execute(); } public void onMapClick(LatLng arg0){ // TODO Auto-generated method stub } class ExecuteTask extends AsyncTask<String, String, String> { @Override protected void onPreExecute(){ super.onPreExecute(); if(stCommand.compareTo("AutoCompleteTextView") != 0) { pDialog = new ProgressDialog(getActivity()); pDialog.setMessage(Html.fromHtml("<b>Search</b><br/>Loading ...")); pDialog.setIndeterminate(false); pDialog.setCancelable(false); pDialog.show(); } } protected String doInBackground(String ... args){ do something return null; } @Override protected void onPostExecute(String file_url){ if(stCommand.compareTo("AutoCompleteTextView") != 0) pDialog.dismiss(); runOnUiThread(new Runnable() { public void run(){ do something } }); } } public void afterTextChanged(Editable s){ // TODO Auto-generated method stub } public void beforeTextChanged(CharSequence s, int start, int count, int after){ // TODO Auto-generated method stub } public void onTextChanged(CharSequence s, int start, int before, int count){ // TODO Auto-generated method stub } } 

Ошибка говорит: Ошибка Eclipse

Как я могу исправить эту ошибку?

Solutions Collecting From Web of "RunOnUiThread в фрагменте"

Попробуйте следующее: getActivity().runOnUiThread(new Runnable...

Это потому что:

1) неявное this в вашем вызове runOnUiThread относится к AsyncTask, а не к вашему фрагменту.

2) Fragment не имеет runOnUiThread

( http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.2.2_r1/android/app/Fragment.java?av=f )

Однако Activity :

( http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.2.2_r1/android/app/Activity.java?av=f )

Обратите внимание, что это просто выполняет Runnable если вы уже находитесь в основном потоке, и использует Handler если вы не находитесь в основном потоке. Вы можете реализовать Handler в своем фрагменте, если вы не хотите беспокоиться об этом контексте, на самом деле это очень просто:

http://developer.android.com/reference/android/os/Handler.html

EDIT: @rciovati прав, вы в onPostExecute , это уже в основном потоке.