[解決済み] runOnUiThread(フラグメント内
2022-05-09 23:18:59
質問
Activityをfragmentに変換しようとしています。エラーメッセージは
runOnUiThread
.
を過ぎると
GoogleActivityV2はActivityから拡張しています。 クラス内のrunOnUiThread ExecuteTask クラスは、アクティビティにネストされています。
(実行OK) 今すぐ
GoogleActivityV2 は Fragment を継承しています。 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
}
}
というエラーが出ています。
どうすればこのエラーを修正できますか?
解決方法は?
これを試してみてください。
getActivity().runOnUiThread(new Runnable...
それは、「なぜ?
1) 暗黙のうちに
this
への呼び出しで
runOnUiThread
はフラグメントではなく、AsyncTaskを参照しています。
2)
Fragment
は runOnUiThread を持っていない。
なお
Activity
を実行するだけです。
Runnable
は、すでにメインスレッドにいる場合、それ以外の場合は
Handler
.
を実装することができます。
Handler
のコンテキストを気にしないのであれば、フラグメント内で
this
というのは、実はとても簡単です。
// A class instance
private Handler mHandler = new Handler(Looper.getMainLooper());
// anywhere else in your code
mHandler.post(<your runnable>);
// ^ this will always be run on the next run loop on the main thread.
EDITです。rciovatiの言う通り、あなたは
onPostExecute
それはもう本スレッドに書いてありますよ。
関連
-
Gradle のエラーです。gradle-core.jar (com.android.tools.build:gradle-core:x.x.x) を見つけられませんでした。
-
プログラム "git.exe "を実行できない場合の正しい解決方法です。CreateProcessエラー=2
-
android studioが "The activity must be exported or contain an intent-filter" と表示され実行される。
-
例外「指定された子にはすでに親がいます」の解決方法。removeViewを呼び出す必要があります" の解決方法(ソースコード付き例)
-
GoogleMapと連携し、位置情報の取得が可能
-
アンドロイドにおけるトークンの利用
-
[解決済み] FragmentでonActivityResultが呼び出されない
-
[解決済み] ViewPagerでFragmentが表示されるタイミングを決定する方法
-
[解決済み] 新しいAndroid Fragmentをインスタンス化するためのベストプラクティス
-
[解決済み] フラグメントでのコンテキストの使用
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Android端末にADBが接続できない!を解決。理由: デバイスが認証されていない!
-
NetworkOnMainThreadException
-
Androidで発生した問題、解決策とヒント
-
アプリはGoogle検索でインデックスされません Androidmanifestのクソみたいな黄色い警告
-
アンドロイドスタジオのエラーを解決する --> Error:(1, 0) id 'com.android.application' を持つプラグインが見つかりません。
-
指定された子にはすでに親がいます。まず、その子の親に対して removeView() をコールする必要があります。
-
ライブラリをモジュールとしてインポートする際にエラーが発生しました。Error:A problem occurred configuring project ':library'.
-
超シンプルなアンドロイドのタイムディレイ機能
-
アンドロイドスタジオソフトウェア使用詳細説明書
-
android studioが新しいプロジェクトを作成しますが、プロジェクトの同期に成功するまでデザインエディタが使用できません。