我有pagerAdapter
通过在viewpager
中滑动来快速显示图像。我想在每个gridview
项目下方加载viewpager
张图片。为避免在快速滑动时加载所有gridview
图像,我使用OnTouchListener
检测触摸事件并加载async task
。问题是,当我查看viewpager时,它会创建3个viewpager页面(我用setOffscreenPageLimit
限制它),left-current-right。我调用异步任务并将所有项加载到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);
}
答案 0 :(得分:1)
这种情况正在发生,因为您有一个GetAsyncProducts
对象盲目地在某处加载数据。它与特定的GridView
无关联,因此AsyncTask
完成 last 将是&#34;赢得&#34;并更新GridView
。由于未提供代码,因此不清楚您如何跟踪数据。我的建议是启动您的AsyncTask
并将其与特定网页相关联,以便更新该特定网页的数据/ View
。
您还要确保跟踪不同的AsyncTask
对象实例,以便在页面被快速解除或您的Activity
/ Fragment
时取消它们进入暂停状态。否则,AsyncTask
可能最终会不必要地继续工作,或者(更糟糕的是)在暂停后尝试更新View
,导致您的应用崩溃。