Viewpager嵌套GridView的实现
2014-09-04 14:44
253 查看
最近再做一个相关的项目,网上查了一些关于viewpager嵌套GridView的demo,效果都不是很理想。参考了一些例子感谢广大乐于分享的coder,在此班门弄斧不足之处见谅!
废话到此,上代码:
1.Viewpager Adaper适配器:
public class MyViewPagerAdapter extends PagerAdapter {
private List<GridView> listGV;
private String TAG = "MyViewPagerAdapter";
public MyViewPagerAdapter(Runnable runnable,
List<GridView> array) {
this.listGV = array;
Log.d(TAG, String.valueOf(listGV.size()));
}
@Override
public int getCount() {
Log.d(TAG, String.valueOf(listGV.size()));
return listGV.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
public Object instantiateItem(View arg0, int arg1) {
try {
((ViewPager) arg0).addView(listGV.get(arg1));
} catch (Exception e) {
e.printStackTrace();
}
return listGV.get(arg1);
}
@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
try {
((ViewPager) arg0).removeView((View) arg2);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
2. GridView Adapter适配器:
/**
* 用于GridView装载数据的适配器
*
* @author fengyook
*
*/
public class ReAdapter extends BaseAdapter implements ImageAsyncTaskInterface {
ImageView img = null;
TextView name = null;
ImageView vip = null;
String tag, page, vid, imgUrl, vname, videoUrl, isVip, totalNum, text;
private int width, height;
private Context context;// 上下文
private static final String TAG = "ReAdapter";
ArrayList<ReBean> mLists = new ArrayList<ReBean>();
int PAGE_SIZE = 4;
private HashMap<Integer, View> currViews = null;
AlertDialog mDialog;
public ReAdapter(Context context, ArrayList<ReBean> reList, int page,
int width, int height, String text) {
this.context = context;
currViews = new HashMap<Integer, View>();
this.mLists = reList;
this.width = width;
this.height = height;
this.text =text;
Log.d(TAG, "text =" + text);
mLists = new ArrayList<ReBean>();
int i = page * PAGE_SIZE;
int end = i + PAGE_SIZE;
while ((i < reList.size()) && (i < end)) {
mLists.add(reList.get(i));
i++;
}
}
public int getCount() {
// TODO Auto-generated method stub
Log.d(TAG, "reList2 = " + mLists.size());
return mLists.size();
}
public Object getItem(int position) {
// TODO Auto-generated method stub
return mLists.get(position);
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
if (!currViews.containsKey(position) || currViews.get(position) == null) {
convertView = LayoutInflater.from(context).inflate(
R.layout.video_item, null);
img = (ImageView) convertView.findViewById(R.id.video_img);
name = (TextView) convertView.findViewById(R.id.video_name);
vip = (ImageView) convertView.findViewById(R.id.is_vip);
vip.setVisibility(View.GONE);
final ReBean re = mLists.get(position);
// 显示VIP标签
isVip = re.getIsVip();
if (isVip.equals("1")) {
vip.setVisibility(View.VISIBLE);
}
name.setBackgroundColor(Color.argb(20, 0, 20, 0));
AsyncTaskPool.getSingleInstance().execute(this, img, context,
re.getVideoImg());
name.setText(re.getName());
Log.d(TAG, "name = " + re.getName());
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
isVip = re.getIsVip();
Log.d(TAG, "isVip = " + re.getIsVip());
if (isVip.equals("1")) {
Log.d(TAG, "弹出对话框!!");
// customDialog(null);
// 预留计费接口
} else {
Intent intent = new Intent(context,
WebViewActivity.class);
vid = re.getVid();
imgUrl = re.getVideoImg();
videoUrl = re.getVideoUrl();
intent.putExtra("videoUrl", videoUrl);
intent.putExtra("width", width);
intent.putExtra("height", height);
intent.putExtra("vid", vid);
context.startActivity(intent);
}
}
});
currViews.put(position, convertView);
}
return currViews.get(position);
}
//下载图片
public void updateUiImg(Bitmap result, ImageView imgView) {
// TODO Auto-generated method stub
if (result != null)
imgView.setImageBitmap(result);
}
3.请求添加数据到GridView
AsyncHttpGet httpget = new AsyncHttpGet(null, RecomEp.URL, parameters,
new RequestResultCallback() {
@Override
public void onSuccess(Object o) {
String response = o.toString();
final RecomWeb rw = new RecomWeb(response);
if (rw.isSuccess()) {
Log.d(TAG, "处理美女请求");
listGV = new ArrayList<GridView>();
runOnUiThread(new Runnable() {
@Override
public void run() {
ArrayList<ReBean> reList = new ArrayList<ReBean>();
reList = rw.getreList();
totalNum = rw.getTotalNum();
Log.d(TAG, "totalNum in 美女: " + totalNum);
for (int i = 0; i < 5; i++) {
GridView gv = new GridView(context);
gv.setAdapter(new ReAdapter(context,
reList, i, width, height, text));
Log.d(TAG, "text: " + text);
gv.setGravity(Gravity.CENTER);
gv.setClickable(true);
gv.setFocusable(true);
gv.setNumColumns(2);
listGV.add(gv);
}
bedapter = new MyViewPagerAdapter(this,
listGV);
be_pager.setAdapter(bedapter);
}
});
};
废话到此,上代码:
1.Viewpager Adaper适配器:
public class MyViewPagerAdapter extends PagerAdapter {
private List<GridView> listGV;
private String TAG = "MyViewPagerAdapter";
public MyViewPagerAdapter(Runnable runnable,
List<GridView> array) {
this.listGV = array;
Log.d(TAG, String.valueOf(listGV.size()));
}
@Override
public int getCount() {
Log.d(TAG, String.valueOf(listGV.size()));
return listGV.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
public Object instantiateItem(View arg0, int arg1) {
try {
((ViewPager) arg0).addView(listGV.get(arg1));
} catch (Exception e) {
e.printStackTrace();
}
return listGV.get(arg1);
}
@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
try {
((ViewPager) arg0).removeView((View) arg2);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
2. GridView Adapter适配器:
/**
* 用于GridView装载数据的适配器
*
* @author fengyook
*
*/
public class ReAdapter extends BaseAdapter implements ImageAsyncTaskInterface {
ImageView img = null;
TextView name = null;
ImageView vip = null;
String tag, page, vid, imgUrl, vname, videoUrl, isVip, totalNum, text;
private int width, height;
private Context context;// 上下文
private static final String TAG = "ReAdapter";
ArrayList<ReBean> mLists = new ArrayList<ReBean>();
int PAGE_SIZE = 4;
private HashMap<Integer, View> currViews = null;
AlertDialog mDialog;
public ReAdapter(Context context, ArrayList<ReBean> reList, int page,
int width, int height, String text) {
this.context = context;
currViews = new HashMap<Integer, View>();
this.mLists = reList;
this.width = width;
this.height = height;
this.text =text;
Log.d(TAG, "text =" + text);
mLists = new ArrayList<ReBean>();
int i = page * PAGE_SIZE;
int end = i + PAGE_SIZE;
while ((i < reList.size()) && (i < end)) {
mLists.add(reList.get(i));
i++;
}
}
public int getCount() {
// TODO Auto-generated method stub
Log.d(TAG, "reList2 = " + mLists.size());
return mLists.size();
}
public Object getItem(int position) {
// TODO Auto-generated method stub
return mLists.get(position);
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
if (!currViews.containsKey(position) || currViews.get(position) == null) {
convertView = LayoutInflater.from(context).inflate(
R.layout.video_item, null);
img = (ImageView) convertView.findViewById(R.id.video_img);
name = (TextView) convertView.findViewById(R.id.video_name);
vip = (ImageView) convertView.findViewById(R.id.is_vip);
vip.setVisibility(View.GONE);
final ReBean re = mLists.get(position);
// 显示VIP标签
isVip = re.getIsVip();
if (isVip.equals("1")) {
vip.setVisibility(View.VISIBLE);
}
name.setBackgroundColor(Color.argb(20, 0, 20, 0));
AsyncTaskPool.getSingleInstance().execute(this, img, context,
re.getVideoImg());
name.setText(re.getName());
Log.d(TAG, "name = " + re.getName());
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
isVip = re.getIsVip();
Log.d(TAG, "isVip = " + re.getIsVip());
if (isVip.equals("1")) {
Log.d(TAG, "弹出对话框!!");
// customDialog(null);
// 预留计费接口
} else {
Intent intent = new Intent(context,
WebViewActivity.class);
vid = re.getVid();
imgUrl = re.getVideoImg();
videoUrl = re.getVideoUrl();
intent.putExtra("videoUrl", videoUrl);
intent.putExtra("width", width);
intent.putExtra("height", height);
intent.putExtra("vid", vid);
context.startActivity(intent);
}
}
});
currViews.put(position, convertView);
}
return currViews.get(position);
}
//下载图片
public void updateUiImg(Bitmap result, ImageView imgView) {
// TODO Auto-generated method stub
if (result != null)
imgView.setImageBitmap(result);
}
3.请求添加数据到GridView
AsyncHttpGet httpget = new AsyncHttpGet(null, RecomEp.URL, parameters,
new RequestResultCallback() {
@Override
public void onSuccess(Object o) {
String response = o.toString();
final RecomWeb rw = new RecomWeb(response);
if (rw.isSuccess()) {
Log.d(TAG, "处理美女请求");
listGV = new ArrayList<GridView>();
runOnUiThread(new Runnable() {
@Override
public void run() {
ArrayList<ReBean> reList = new ArrayList<ReBean>();
reList = rw.getreList();
totalNum = rw.getTotalNum();
Log.d(TAG, "totalNum in 美女: " + totalNum);
for (int i = 0; i < 5; i++) {
GridView gv = new GridView(context);
gv.setAdapter(new ReAdapter(context,
reList, i, width, height, text));
Log.d(TAG, "text: " + text);
gv.setGravity(Gravity.CENTER);
gv.setClickable(true);
gv.setFocusable(true);
gv.setNumColumns(2);
listGV.add(gv);
}
bedapter = new MyViewPagerAdapter(this,
listGV);
be_pager.setAdapter(bedapter);
}
});
};
相关文章推荐
- Android之ViewPager中包含ViewFlipper时实现双滑动嵌套解决父控件干扰问题
- ListView嵌套Viewpager实现左滑打电话,右滑发短信(附源码)
- ScrollView嵌套ListView,GridView,ViewPager,以及这些控件自动滚动到底部问题的解决
- android listview嵌套viewpager,viewpager嵌套gridview,解决内嵌无法显示以及时间冲突的问题
- ScorollView ViewPager gridView嵌套错误
- 使用ViewPager+GridView实现横向滑动的效果(一)
- 使用ViewPager+GridView实现横向滑动的效果(一)
- Android:Listview中嵌套viewpager的实现总结
- 【Android实战】ScrollView+GridView+ViewPager实现导航页
- Android 实现横向标题栏滚动效果(HorizontalScrollView + GridView + Viewpager + 自定义适配器)
- 使用ViewPager+GridView实现横向滑动的效果(二)
- FragmentTabHost+Fragment+ViewPager实现内外层嵌套
- 关于viewpager 里嵌套 listview 同时实现翻页功能的“java.lang.IllegalStateException: The specified child..."异常处理
- 使用RecyclerView实现多行水平分页的GridView效果和ViewPager效果
- 使用viewpager嵌套实现上下左右滑动切换图片(IOS双向滚动翻页效果相同)
- 使用ViewPager+GridView实现横向滑动的效果(二)
- 使用viewpager嵌套实现上下左右滑动切换图片
- listview中嵌套viewpager的实现总结
- 关于ListView嵌套ViewPager,ViewPager嵌套GridView的一些问题。
- 通过Fragment + Viewpager+Gridview实现Android Tab切换菜单