gpt4 book ai didi

android - 在 instantiateItem 中具有异步任务的 PagerAdapter-Viewpager 在最后创建的页面上加载产品

转载 作者:行者123 更新时间:2023-11-30 02:01:16 36 4
gpt4 key购买 nike

我有 pagerAdapter 可以通过在 viewpager 中滑动来快速显示图像。我想在每个 viewpager 项目下方加载 gridview 图像。为了避免在快速滑动时加载所有 gridview 图像,我使用 OnTouchListener 检测触摸事件并加载 async task。问题是,当我打开 viewpager 时,它会创建 3 个 viewpager 页面(我用 setOffscreenPageLimit 限制了它),左-当前-右。我调用异步任务并将所有项目加载到 gridview,但 gridview 图像未显示在 current viewpager page 上,因为它在最后创建的 viewpager 页面上加载 gridview 图像。

如何将异步任务图片添加到当前viewpager项目?我的逻辑错了吗?你能建议一些东西来实现这个目标吗?感谢您的关注。

这是 instantiateItem:

@Override
public Object instantiateItem(ViewGroup container, int position) {
inflater = (LayoutInflater) container.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.detail, container, false);

mGridView = (ExpandableHeightGridView)view.findViewById(R.id.product);
mGridView.setExpanded(true);

scrollView.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getActionMasked();
switch (action) {

case MotionEvent.ACTION_DOWN:
initialY = event.getY();
break;

case MotionEvent.ACTION_MOVE:
break;

case MotionEvent.ACTION_UP:
float finalY = event.getY();
if (initialY < finalY | initialY > finalY) {
if(!asyncTaskCalled){
new GetAsyncProducts().execute();
asyncTaskCalled=true;
}
}

break;

case MotionEvent.ACTION_CANCEL:
break;

case MotionEvent.ACTION_OUTSIDE:
break;
}
return false;
}
});

}

异步过程:

  @Override
protected void onPreExecute(){
GetProducts.productID = list_pk.get(viewPager.getCurrentItem());
new GetProducts(); // This is service and gets products.
}
@Override
protected void onPostExecute(View result) {
listproducts.addAll(GetProducts.list_products);
imgAdapter = new ImageAdapter(); // GridView Adapter
mGridView.setAdapter(imgAdapter);
imgAdapter.notifyDataSetChanged();
super.onPostExecute(result);
}

最佳答案

发生这种情况是因为您有一个 GetAsyncProducts 对象,它盲目地将数据加载到某处。它不与特定的 GridView 相关联,因此无论哪个 AsyncTask 完成 last 都将“获胜”并更新 GridView。由于未提供代码,因此不清楚您是如何跟踪数据的。我的建议是启动您的 AsyncTask 并将其与特定页面相关联,以便更新该特定页面的数据/View

您还需要确保跟踪不同的 AsyncTask 对象实例,以便在页面快速关闭或您的 Activity/Fragment 进入暂停状态。否则,您的 AsyncTask 可能会不必要地继续工作,或者(更糟糕的是)尝试在暂停后更新 View,从而导致您的应用程序崩溃。

关于android - 在 instantiateItem 中具有异步任务的 PagerAdapter-Viewpager 在最后创建的页面上加载产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31429625/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com