【发布时间】:2015-07-15 11:52:01
【问题描述】:
我有pagerAdapter 可以通过在viewpager 中滑动来快速显示图像。我想在每个viewpager 项目下方加载gridview 图像。为了避免在快速滑动时加载所有gridview 图像,我使用OnTouchListener 来检测触摸事件并加载async task。问题是当我打开 viewpager 时,它会创建 3 个 viewpager 页面(我用setOffscreenPageLimit 限制它),left-current-right。我调用异步任务并将所有项目加载到gridview,但gridview 图像未显示current viewpager page,因为它在最后创建的viewpager 页面上加载gridview 图像。
如何将异步任务图像添加到当前的 viewpager 项目?我的逻辑错了吗?你能提出一些建议来实现这一目标吗? 感谢您的关注。
这里是实例化项目:
@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);
}
【问题讨论】:
-
您能提供
GetAsyncProudcts类的代码吗?另外,澄清一下:您有 3 个单独的 gridvews,每页一个? -
不,一页有一个 GridView(如果用户一一触摸所有页面)。我添加了异步任务流程。请参阅编辑。
标签: android android-asynctask android-viewpager