GridView在Fragment中的使用
以下是实现的通过GridView加载广告图片(没有加载文字),上面的“今日推荐”,“更多”字样是通过Layout布局实现的。通过添加监听器,点击每一个图片,并且携带图片的Id进行转跳
这是一个GridView容器,用来放后面的gridview_tuijian_item,包括附加了上面的一个标题行“今日推荐”,“更多”
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="16dp"android:layout_marginRight="16dp"android:background="#ccc" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"android:text="今日推荐"android:textSize="16sp"android:textStyle="bold" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_centerVertical="true"android:text="更多"android:textColor="#f00"android:textSize="16sp"android:textStyle="bold" /></RelativeLayout><!-- 推荐商品 --><GridViewandroid:id="@+id/home_gridview_tuijian"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="16dp"android:layout_marginRight="16dp"android:columnWidth="75dp"android:horizontalSpacing="4dp"android:numColumns="4"android:stretchMode="spacingWidth"android:verticalSpacing="4dp" ></GridView></LinearLayout>
创建一个gridview_tuijian_item
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><ImageViewandroid:id="@+id/gridview_item_tuijian_iv"android:layout_width="85dp"android:layout_height="75dp" /></LinearLayout>
创建一个GridView适配器GridViewTuijianAdapter:
public class GridViewTuijianAdapter extends BaseAdapter {private Context context;private List<Integer> data;public GridViewTuijianAdapter(Context context, List<Integer> data) {super();this.context = context;this.data = data;}@Overridepublic int getCount() {return data.size();}@Overridepublic Object getItem(int position) {return data.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder = null;if (convertView == null) {convertView = LayoutInflater.from(context).inflate(R.layout.gridview_tuijian_item, null);holder = new ViewHolder();holder.iv = (ImageView) convertView.findViewById(R.id.gridview_item_tuijian_iv);convertView.setTag(holder);// 如果convertView为空就 把holder赋值进去} else {holder = (ViewHolder) convertView.getTag();// 如果convertView不为空,那么就在convertView中getTag()拿出来}Integer current = data.get(position);holder.iv.setImageResource(current);return convertView;}static class ViewHolder {ImageView iv;}
}
由于这些BOLG内容都是源自一个项目的每一个知识点都是经过单独提取出来的,略微包含一些不太相关的内容,比如下面代码中的initAdv(rootView)这个方法以及前面注释中的变量名都是为另一个功能写的:
public class HomeFragment extends Fragment {private View rootView;// ViewPager 广告相关private ViewPager viewPagerAdv;private List<ImageView> advIvs;// 数据源private PagerAdapter advAdapter;// 适配器// ViewPager 广告下方今天推荐商品private List<Integer> tuijian;private GridView gridViewtuijian;private BaseAdapter tuijianAdapter;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {if (null == rootView) {rootView = inflater.inflate(R.layout.fragment_home, container,false);initView(rootView);}ViewGroup parent = (ViewGroup) rootView.getParent();if (null != parent) {parent.removeView(rootView);}return rootView;}private void initView(View rootView) {/* 初始化广告ViewPager */initAdv(rootView);/* 初始化广告下方的今日推荐 */initTuijian(rootView);}/** 今日推荐*/private void initTuijian(View rootView2) {gridViewtuijian = (GridView) rootView.findViewById(R.id.home_gridview_tuijian);// 数据源tuijian = new ArrayList<Integer>();tuijian.add(R.drawable.tuijian1);tuijian.add(R.drawable.tuijian2);tuijian.add(R.drawable.tuijian1);tuijian.add(R.drawable.tuijian2);tuijian.add(R.drawable.tuijian1);tuijian.add(R.drawable.tuijian2);tuijian.add(R.drawable.tuijian1);tuijian.add(R.drawable.tuijian2);// 适配器tuijianAdapter = new GridViewTuijianAdapter(getActivity(), tuijian);// 添加控件适配器gridViewtuijian.setAdapter(tuijianAdapter);// 添加GridView的监听事件gridViewtuijian.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {// 跳转到另一个界面查看商品详细信息Intent intent = new Intent(getActivity(),ProductDetailActivity.class);intent.putExtra("productId", position);//携带参数startActivity(intent);}});}/** 广告* @param 作者*/private void initAdv(View rootView2) {viewPagerAdv = (ViewPager) rootView.findViewById(R.id.home_viewpager_adv);// 构造ViewPager数据源advIvs = new ArrayList<ImageView>();ImageView iv1 = new ImageView(getActivity());iv1.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));iv1.setImageResource(R.drawable.home_adv_1);advIvs.add(iv1);ImageView iv2 = new ImageView(getActivity());iv2.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));iv2.setImageResource(R.drawable.home_adv_2);advIvs.add(iv2);ImageView iv3 = new ImageView(getActivity());iv3.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));iv3.setImageResource(R.drawable.home_adv_3);advIvs.add(iv3);// 初始化适配器对象ViewPager的适配器advAdapter = new ViewPagerAdvAdapter(getActivity(), advIvs);// ViewPager加载适配器viewPagerAdv.setAdapter(advAdapter);// 还可以为ViewPager添加监听}
}
GridView在Fragment中的使用相关推荐
- overridePendingTransition 方法在Fragment 中使用
overridePendingTransition 方法在直接卸载Fragment 中无法识别 这个使用可以在前面添加getActivity 即可使用了 getActivity().override ...
- 如何在Fragment中使用findViewById
findViewById方法却只能被用在Activity类中,如果想在fragment中使用, 需要在findViewById前面 添加getView(); 下面是一段代码, public class ...
- Fragment 中使用 getLayoutInflater() 的问题
问题: 我想在一个Fragment的ListView中显示我的搜索结果 但在这里报错: LayoutInflater inflater = getLayoutInflater(); "The ...
- Fragment中调用getActivity为null的问题
Fragment中调用getActivity为null的问题
- Fragment中使用viewLifecycleOwner/getActivity/this
观察liveData使用生命周期 如图:当liveData想在fragment里观察的时候,可以使用getActivity/this/getViewLifecycleOwner. getActivit ...
- Android 在Fragment中执行onActivityResult不被调用的简单解决方法
Android 在Fragment中执行onActivityResult不被调用的简单解决方法 参考文章: (1)Android 在Fragment中执行onActivityResult不被调用的简单 ...
- Android Fragment中嵌套Fragment,不显示view
原文链接:http://www.jianshu.com/p/e146698482f5 先看一段错误代码,这段代码写在一个 Fragment 中: private void initView(){mVi ...
- Android --- 动态获取定位权限时: Fragment 中 onRequestPermissionsResult 方法不执行
今天我在写百度地图 API 定位功能的时候遇到了这样一个问题,需要在打开 APP 首页的时候动态获取定位权限,然后我的代码是这样写的(在 Fragment 中) @Nullablepublic Vie ...
- Android的Fragment中onActivityResult不被调用
1.检查该Fragment所属的Activity中,是否重写了onActivityResult方法. 2.检查Fragment中的startActivityForResult的调用方式. 请确保不要使 ...
最新文章
- windows下apache配置虚拟主机的两个方法
- pgsql数据库默认配置事务类型_PostgreSQL基础教程之:初始化配置
- 寻找两个字符串相似度的代码
- 菲尔兹奖得主舒尔茨没做到的事,现在被计算机证明了
- python写魔兽世界脚本_用python bat写软件安装脚本 + HM NIS Edit自动生成软件安装脚本...
- 你在京东购买的商品,是怎么出现在抖音里面的?
- 中国大学MOOC 计算机组成原理第4章 测试(中)
- Telerik Reporting之生成报表
- py06-python基础-字典
- LS 24 Bracket sequence(DP)
- [ECMAScript] 说说你对Babel的了解?
- python选课系统作业_Python 大作业4:选课系统
- linux下合并两个文件夹
- java无法编译加载主类_JAVA编译完毕运行时错误找不到或无法加载主类
- 语音识别几成标配,哈弗F7的智能语音系统有何不同?
- 贺利坚老师汇编课程55笔记:带进位加法指令ADC
- sf上的SIMD的程序库
- NIO消息边界问题处理
- 树莓派红外火焰传感器
- MyBatis 关联查询(一对多 多对一)