私がやっていることの簡単な説明: 私のFragmentActivityホストは を介して 4 つのフラグメントでありViewPager、それらは を拡張する私のクラスで作成されますFragment。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = null;
switch (mPage) {
case 1:
view = inflater.inflate(R.layout.frag1,
container, false);
initFrag1(view);
break;
// ....... and so on
}
return view;
}
メソッドではonCreateView()、ページ (フラグメント) に応じてデータを初期化します。各 Fragment には、 LOT OF を持つ非常に複雑な Layout がありTextViewsます。ユーザーが前の をFragmentActivityクリックすると開始され、開始までに約 0.5 ~ 1 秒の遅延があります。私の考えでは、遅延は大量の を初期化して設定することによって引き起こされるので、次のようにすべてを実行しようとしました。ListItemActivityFragmentActivityTextViewsAsyncTask
@Override
protected Void doInBackground(Void... params) {
DecimalFormat df = new DecimalFormat("#0.00");
for (int i = 0; i < FirstTextViewArray.length; i++) {
tmp = (TextView) v.findViewById(FirstTextViewArray[i]);
tmp.setText("test " + String.valueOf(i));
}
for (int i = 0; i < SecondTextViewArray.length; i++) {
tmp = (TextView) v.findViewById(SecondTextViewArray[i]);
tmp.setText(df.format((SomeClass
.getSomeFloatArray(Constants.tmpObject.getSomeInt())[i]));
}
return null;
}
したがって、基本的にはTextViewsasArraysと inflatedViewをAsyncTaskコンストラクターに渡し、初期化してループ内に設定するだけです。
Fragmentsそれは動作しますが、例外でアプリがクラッシュする間をスワイプすると(10分の1のように)時々動作します:
CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views
それが何をException意味するかはわかりますが、問題は、なぜそれが偶発的に発生するのかということです。
Views2 番目の質問: init とバックグラウンドでの設定は適切ではないと思います。どうすればActivity's開始時の遅延を回避できますか?