ここでは、ビューページャーをフラグメントで高速化する方法などの質問があります。viewpagerを素早くフラグメントに変換する方法は?
私がやっていることの説明:
を私はそれぞれのデータをviewpagerするフラグメントをロードしていたコンテンツの数にそれぞれdata.Basedを示すために、5つのウェブビューと1つのリストビューを含むフラグメントを持っています。インプリメンテーションは、ビュー・ページャーのすべての良いがパフォーマンスは非常に遅いです。
コードスニペット:
ページャアダプタのロード:
FragmentPagerAdapter mFragmentPagerAdapter = new ViewPagerAdapter(getActivity(), getChildFragmentManager(), takeExamResponse.getPayloads().getQuestions(), mFragmentNavigator, takeExamResponse.getPayloads().getType(), "finished".equals(getArguments().getString("IS_FINISHED")) ? true : false, mQuestionsFragment);
viewPager.setAdapter(mFragmentPagerAdapter);
PagerAdapter:
import android.content.Context;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import com.comquest.fragment.ViewPagerFragment;
import com.comquest.interfaces.FragmentNavigator;
import com.comquest.response.Question;
import com.comquest.utilities.EGApplication;
import java.util.List;
public class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Question> takeExamResponse;
private final Context context;
FragmentNavigator fragmentNavigator;
String type = "";
private boolean isFinshed;
private EGApplication.Listener mListener;
public ViewPagerAdapter(Context context, FragmentManager fm, List<Question> response, FragmentNavigator fragmentNavigator, String type, boolean isFinshed, EGApplication.Listener mListener) {
super(fm);
this.takeExamResponse = response;
this.isFinshed = isFinshed;
this.context = context;
this.mListener = mListener;
this.fragmentNavigator = fragmentNavigator;
this.type = type;
}
@Override
public Fragment getItem(int position) {
return ViewPagerFragment.newInstance(context, takeExamResponse.get(position), fragmentNavigator, type, isFinshed, mListener, position);
}
@Override
public int getCount() {
return takeExamResponse.size();
}
@Override
public int getItemPosition(Object object) {
notifyDataSetChanged();
return POSITION_NONE;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
FragmentManager manager = ((Fragment) object).getFragmentManager();
FragmentTransaction trans = manager.beginTransaction();
trans.remove((Fragment) object);
trans.commit();
super.destroyItem(container, position, object);
}
}
私は、各試験の100〜150疑問を持っているアプリの試験の種類を、やっています。ときに私は30から150の質問を読み込んでいるときに、断片的なアプリケーションが遅くなり、時々クラッシュを使用しています。
私は、このためのいくつかの最適なソリューションを必要とキャッチされない例外メッセージ
07-31 23:50:25.350 22065-22065/exam.test E/ApkAssets: Error while loading asset assets/natives_blob_64.bin: java.io.FileNotFoundException: assets/natives_blob_64.bin
07-31 23:50:25.350 22065-22065/exam.test E/ApkAssets: Error while loading asset assets/snapshot_blob_64.bin: java.io.FileNotFoundException: assets/snapshot_blob_64.bin
07-31 23:50:27.499 22065-23275/exam.test E/libEGL: validate_display:255 error 3008 (EGL_BAD_DISPLAY)
07-31 23:52:00.941 22065-22065/exam.test E/libc++abi: terminating with uncaught exception of type std::bad_alloc: std::bad_alloc
07-31 23:52:01.359 22065-22065/exam.test A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 22065
があります。
のコレクションいいえ、あなたは、あなたの問題がどこにあるかを決定するために開発ツールを使用する必要があります。メソッドのトレースを使用して、あなたの時間がどこに費やされているかを判断してください。 LogCatを使用して、クラッシュに関連するJavaスタックトレースを調べます。等々。 – CommonsWare
@CommonsWareの場合、何の例外もなくページャを表示するために、より多くのフラグメントをロードしています。 – Boopathi
@CommonsWare私はログを更新しました。メモリリークもありません。 – Boopathi