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