Android 碎片StatePageRadapter性能问题,碎片数未知

Android 碎片StatePageRadapter性能问题,碎片数未知,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,这么长时间以来,我一直在寻找一个可靠的答案来解决我的性能问题。但我还没找到答案,据我所知,每个人都对此感到困惑 基本上,我在一个活动中有一个新闻列表(在listview中显示为标题),在我的详细信息活动中有一个新闻对象的详细信息。我已将“详细信息”活动更改为保留扩展FragmentStatePagerAdapter的viewpager。我的主要头条新闻通常是20/25 当用户单击单个listview项目时,它会将新闻列表传递给下一个活动: Intent intent = new Intent(g

这么长时间以来,我一直在寻找一个可靠的答案来解决我的性能问题。但我还没找到答案,据我所知,每个人都对此感到困惑

基本上,我在一个活动中有一个新闻列表(在listview中显示为标题),在我的详细信息活动中有一个新闻对象的详细信息。我已将“详细信息”活动更改为保留扩展FragmentStatePagerAdapter的viewpager。我的主要头条新闻通常是20/25

当用户单击单个listview项目时,它会将新闻列表传递给下一个活动:

Intent intent = new Intent(getApplicationContext(), Detail.class);
bundle.putInt("pos", i);
intent.putExtra("news", newsList);
intent.putExtras(bundle);
startActivity(intent);
“我的详细信息”活动从“标题”活动中获取捆绑数据,并准备适配器:

fm = getSupportFragmentManager();
news = (ArrayList) getIntent().getSerializableExtra("news");
current = getIntent().getExtras().getInt("pos");
fragments2 = new ArrayList<Fragment>();

vpPager = (ViewPager) findViewById(R.id.vpPager);

adapterViewPager = new ViewFlipperAdapter(current, getApplicationContext(), fm, news, handler, version());
vpPager.setAdapter(adapterViewPager);
vpPager.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

vpPager.setCurrentItem(current);
vpPager.setOnPageChangeListener(Detail.this);
问题是,当我单击单个列表项时,它会显示单个新闻项的详细信息。在这之前,我看不出有什么不对劲。但当我在不同的视图之间滑动时,应用程序一次又一次地处理视图的速度变得非常慢。此外,我跳转的页面与我设置的数据不一致。(滑回上一个视图会导致重新加载视图。)

我怎样才能克服这个问题?(顺便说一句,我正在使用fedorvlasov的延迟加载库和DFPSDK,它们分别针对每个视图进行初始化。)

-另外,我试过ViewPager.setOffScreenPageLimit(),但似乎效率不高


提前谢谢。

为什么要禁用硬件加速?好的,我将删除它并尝试一下。仍然出现性能问题。你找到答案了吗?没有,我找不到。你有答案吗?
public class ViewFlipperAdapter extends FragmentStatePagerAdapter {
    private List<News> news;
    private Handler handler;
    private boolean version;
    private Context context;
    private int current;

    public ViewFlipperAdapter(int current, Context context, FragmentManager fm, List<News> news,
                              Handler handler, boolean version) {
        super(fm);
        this.news = news;
        this.handler = handler;
        this.version = version;
        this.context = context;
        this.current = current;
    }

    @Override
    public Fragment getItem(int position) {
        return DetailFragment.newInstance(current, context, news.get(position), handler, version);
    }

    @Override
    public int getCount() {
        return this.news.size();
    }
}
public class DetailFragment extends Fragment implements View.OnClickListener {

    public DetailFragment() {
    }

    //view initialization
    boolean version;
    String detailTitle;
    String detailSpot;
    String detailImage;
    String detailText;
    String video;
    String url;
    //get holder
    ViewHolder holder = new ViewHolder();

    // newInstance constructor for creating fragment with arguments
    public static DetailFragment newInstance(int current, Context c, News n, Handler h, boolean version) {
        DetailFragment fragmentFirst = new DetailFragment();
        handler = h;
        cont = c;
        // Supply num input as an argument.
        Bundle args = new Bundle();
        //initalise everything related to a news object inside bundle.
        args.putString(Statics.detailTitle, n.getTitle());
        args.putString(Statics.detailSpot, n.getSpot());
        args.putString(Statics.detail_image_inner, n.getImage());
        args.putString(Statics.playButton, n.getVideo());
        args.putString(Statics.detailText, n.getText());
        args.putString(Statics.category_detail, n.getCategory());
        args.putString(Statics.button_fb, n.getWeb());
        args.putBoolean(Statics.version, version);
        args.putInt(Statics.current, current);
        fragmentFirst.setArguments(args);
        return fragmentFirst;
    }
// Inflate the view for the fragment based on layout XML
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.details, container, false);

        //adview related.
        containerWidth = cont.getResources().getDisplayMetrics().widthPixels;
        ((WindowManager) cont.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(dm);
        containerWidth = cont.getResources().getDisplayMetrics().widthPixels;
        width = dm.widthPixels;


        holder.detailTitle = (TextView) view.findViewById(R.id.detailTitle);
        holder.detailSpot = (TextView) view.findViewById(R.id.detailSpot);
        holder.detailText = (TextView) view.findViewById(R.id.detailText);
        holder.progressBar = (ProgressBar) view.findViewById(R.id.progressBar);
        holder.detailImage = (ImageView) view.findViewById(R.id.detailImageInner);
        holder.detailImage.setAdjustViewBounds(true);
        holder.playImage = (ImageView) view.findViewById(R.id.playButton);
        holder.progressBar2 = (ProgressBar) view.findViewById(R.id.progressBar2);
        holder.shareButton = (Button) view.findViewById(R.id.buttonFB);
        holder.playImage.setOnClickListener(this);

        //some setters for image and textviews...

        return view;
    }