runOnUiThread dans fragment

J’essaie de convertir une activité en fragment. La marque d’erreur sur runOnUiThread . Sur le passé:

GoogleActivityV2 s’étend de l’activité. runOnUiThread dans la classe ExecuteTask. classe ExecuteTask nestede sur l’activité.

(Exécuter ok) maintenant:

GoogleActivityV2 s’étend de Fragment. runOnUiThread dans la classe ExecuteTask. classe ExecuteTask nestede sur l’activité. (Erreur sur runOnUiThread)

voici mon code

 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(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 { @Override protected void onPreExecute(){ super.onPreExecute(); if(stCommand.compareTo("AutoCompleteTextView") != 0) { pDialog = new ProgressDialog(getActivity()); pDialog.setMessage(Html.fromHtml("Search
Loading ...")); pDialog.setIndeterminate(false); pDialog.setCancelable(false); pDialog.show(); } } protected Ssortingng doInBackground(Ssortingng ... args){ do something return null; } @Override protected void onPostExecute(Ssortingng 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 } }

l’erreur dit: Erreur Eclipse

Comment puis-je corriger cette erreur?

Essayez ceci: getActivity().runOnUiThread(new Runnable...

C’est parce que:

1) le fait implicite dans votre appel à runOnUiThread fait référence à AsyncTask, pas à votre fragment.

2) Fragment n’a pas runOnUiThread.

Cependant, l’ Activity fait.

Notez que Activity exécute simplement Runnable si vous êtes déjà sur le thread principal, sinon il utilise un Handler . Vous pouvez implémenter un Handler dans votre fragment si vous ne voulez pas vous soucier du contexte, c’est en fait très simple:

 // A class instance private Handler mHandler = new Handler(Looper.getMainLooper()); // anywhere else in your code mHandler.post(); // ^ this will always be run on the next run loop on the main thread. 

EDIT: @rciovati a raison, vous êtes dans onPostExecute , c’est déjà sur le thread principal.