私がやっていることの簡単な説明: 私の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 秒の遅延があります。私の考えでは、遅延は大量の を初期化して設定することによって引き起こされるので、次のようにすべてを実行しようとしました。ListItem
Activity
FragmentActivity
TextViews
AsyncTask
@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;
}
したがって、基本的にはTextViews
asArrays
と inflatedView
をAsyncTask
コンストラクターに渡し、初期化してループ内に設定するだけです。
Fragments
それは動作しますが、例外でアプリがクラッシュする間をスワイプすると(10分の1のように)時々動作します:
CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views
それが何をException
意味するかはわかりますが、問題は、なぜそれが偶発的に発生するのかということです。
Views
2 番目の質問: init とバックグラウンドでの設定は適切ではないと思います。どうすればActivity's
開始時の遅延を回避できますか?