少し背景: 'onResume'が私のサーバーに接続して情報を要求するときの私の主なアクティビティ。これは正しく動作します。 アクティビティが応答を受け取ると、配列にデータをロードします。配列のロードが完了すると、メインアクティビティにある 'UpdateFragments'が呼び出されます。 ここでは、今私はただ一つの断片を使用するために、これは私のアダプタである...すべてのフラグメントがupdateView()プロシージャを実装して...非同期タスクのフラグメントを更新する
public void updateFragments() {
List<Fragment> allFragments = getSupportFragmentManager().getFragments();
if (allFragments == null || allFragments.isEmpty())
return;
for (Fragment fragment : allFragments)
if (fragment.isVisible())
((UpdatableFragment) fragment).updateView();
}
です:
おかしくへpublic class MainAdapter extends FragmentPagerAdapter {
MainAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return FragmentDevices.newInstance();
}
@Override
public int getCount() {
return 1;
}
}
そして今、次のコードで一部...(私たちは今、断片である)それだけで動作しますが、実行しているときに私は、文字列と私の空白の断片があります。私は私のupdateView上で同じコードを入れた場合(
private TextView tv;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.device_fragment, parent, false);
tv = (TextView) view.findViewById(R.id.room);
tv.setText("PRINT THIS");
return view;
}
を)
@Override
public void updateView() {
tv.setText("PRINT THIS");
}
しかし...と、ここでそれがあるべきよう非同期タスクが終了したときにupdateViewがMainActivityから呼び出された場合、我々は大きな毛深いしかし...を持っている:onCreateViewそれはまた働く内側に手続きして呼び出します...テキストは決して印刷されません。 そして奇妙なことはちょうど始めに...コードをデバッグしようとすると..私はtv.setText命令に達すると、アプリはちょうど死ぬ...エラーなし。
02-07 16:48:18.015 1649-3024/? I/ActivityManager: Force stopping XXX appid=10185 user=0: from pid 23193
02-07 16:48:18.015 1649-3024/? I/ActivityManager: Killing 22729:XXX/u0a185 (adj 0): stop XXX
02-07 16:48:18.027 1649-3440/? I/WindowState: WIN DEATH: Window{8db1796 u0 XXX/XXX.MainActivity}
編集: @nbokmansは右のだろうか?
@Override
public void onStart() {
super.onStart();
mDataManager = new DataManager(this);
}
とのDataManagerクラスは、このです::それはMainActivityにある コンストラクタ:
public DataManager(MainActivity context) {
super(context);
mHandle = context;
...
}
非同期タスクはこれを呼び出します。
public void onNewData(JSONObject data) {
...
mHandle.updateFragments();
}
これはあなたの問題の原因ですが、あなたはまだあなたが 'updateFragments'メソッドを呼び出しているthread.How非UIから' updateView'メソッドを呼び出すことができればわかりませんか?それをあなたの投稿に追加できますか? – nbokmans
自分のビューを更新するためにフラグメントitslefのメソッドを使用しました。アクティビティは、あなたが望むフラグメントを添付する必要があります。 – rlopezo
datamanagerはバックグラウンドスレッドを使用していますか? – Krish