我正在尝试将 Activity 转换为片段。 runOnUiThread
上的错误标记。关于过去:
GoogleActivityV2 从 Activity 扩展而来。 ExecuteTask 类中的 runOnUiThread。类 ExecuteTask 嵌套在活动上。
(运行正常)现在:
GoogleActivityV2 从 Fragment 扩展而来。 ExecuteTask 类中的 runOnUiThread。类 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
}
}
错误说:
我该如何解决这个错误?
原文由 Tai Dao 发布,翻译遵循 CC BY-SA 4.0 许可协议
试试这个:
getActivity().runOnUiThread(new Runnable...
这是因为:
隐含的
this
在您对runOnUiThread
的调用中指的是 AsyncTask,而不是您的片段。Fragment
没有runOnUiThread。但是,
Activity
可以。请注意
Activity
Runnable
,否则它使用Handler
。如果您不想担心 --- 的上下文, 您Handler
在片段中实现this
,这实际上非常简单:编辑:@rciovati 是对的,您在
onPostExecute
中,这已经在主线程上。