代码学习

1.Fragment的onCreateView()方法里,学习用代码添加布局,控件,及它们的属性设置。

  @Nullable
  @Override
  public View onCreateView(LayoutInflater inflater, @Nullable  ViewGroup    container, @Nullable Bundle savedInstanceState) {

//      LayoutParams相当于一个Layout的信息包,它封装了Layout的位置、高、宽等信息。
        FrameLayout.LayoutParams params=new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
//      新建一个布局
        FrameLayout f1=new FrameLayout(getActivity());
//      给布局设置参数
        f1.setLayoutParams(params);

//        TypedValue.applyDimension将数值转换为dp单位等, 
//       sp也可以TypedValue.COMPLEX_UNIT_SP,后两个参数不变。
        final  int margin= (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,8,getResources().getDisplayMetrics());
//        给参数设置外边距
        params.setMargins(margin,margin,margin,margin);

//        新建一个TextView
        TextView v=new TextView(getActivity());
//        设置布局参数
        v.setLayoutParams(params);
//        设置内容对齐方式
        v.setGravity(Gravity.CENTER);
//        设置文本
        v.setText("PAGE"+(position+1));

//        布局添加一个控件
        f1.addView(v);

        return f1;
    }

2.Fragment的实例化方法

   /**
     * 实例化Fragment的方法,可以在新建Fragment对象时,使用Bundle携带数据
     */
    public static NewsFragment newInstance(int position){
        NewsFragment f=new NewsFragment();
        Bundle b=new Bundle();
        b.putInt(ARG_POSITION,position);
        f.setArguments(b);
        return f;
    }

    /**
     *  使用从Bundle回传的数据
     */
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        position=getArguments().getInt(ARG_POSITION);
    }

3.定时执行任务,Timer ,Handler,AsyncTask

// 新建Timer对象
 Timer timer = new Timer();
 // 使用schedule方法定时执行任务
 timer.schedule(new TimerTask() {
    @Override
    public void run() {
        //往Handler发送一个消息
        Message message = mHandler.obtainMessage();
        message.what = UPDATE_WEATHER_CODE;
        mHandler.sendMessage(message);
        // 这是执行一个AsyncTask去网络获取数据
        new RequestNetworkDataTask().execute(httpArg);
    }
 }, 1000, 60000);

 mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
       switch (msg.what) {
           // 处理相对应的消息,更新UI
          case UPDATE_WEATHER_CODE:
                if (isFirst) {
                   Toast.makeText(WeatherActivity.this, "获取成功", Toast.LENGTH_SHORT).show();
                   isFirst = false;
                } else {
                  Toast.makeText(WeatherActivity.this, "更新完成", Toast.LENGTH_SHORT).show();
                }
                break;
        }
   }
};

4、根据ViewPager的页面数在Tab控制栏,添加布局

    /**
     * 根据ViewPager的Adapter更新视图
     */
    private void notifyDataSetChanged() {
//        ViewGroup的方法,移除所有视图
        mTabsContainer.removeAllViews();
//      根据ViewPager的Adapter得到页面的数量
        tabCount=pager.getAdapter().getCount();

        for (int i = 0; i < tabCount; i++) {
//            ViewPager的页标题=pager.getAdapter().getPageTitle(i).toString()
            addTab(i,pager.getAdapter().getPageTitle(i).toString());
        }
    }

    /**
     * 装ViewGroup进入 LinearLayout中
     */
    private void addTab(final int position, String title) {
        ViewGroup tab= (ViewGroup) mLayoutInflater.inflate(R.layout.category_tab,this,false);
        TextView category_text= (TextView) tab.findViewById(R.id.category_text);
        category_text.setText(title);
        category_text.setGravity(Gravity.CENTER);
        category_text.setSingleLine();
        category_text.setFocusable(true);
        category_text.setTextColor(getResources().getColor(R.color.category_tab_text));

//        给该ViewGroup设置监听器。方法作用,点击该布局,更换下面的ViewPager页面
        tab.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                //ViewPager方法,根据position设置当前ViewPager的页面
                pager.setCurrentItem(position);
            }
        });
//       将上面的ViewGroup就是tab,装进另一个LinearLayout就是mTabsContainer中
        mTabsContainer.addView(tab,position,mDefaultTabLayoutParams);
    }

5、ViewPager页面变化监听器

    /**
     * ViewPager页面变化监听器
     */
    private class  PageListener implements ViewPager.OnPageChangeListener{
        /**
         * 当页面在滑动的时候会调用此方法,在滑动被停止之前,此方法会一直得到调用。其中三个参数的含义分别为:
         * @param position  当前页面,及你点击滑动的页面
         * @param positionOffset   当前页面偏移的百分比
         * @param positionOffsetPixels  当前页面偏移的像素位置
         */
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            currentPosition=position;
            currentPositionOffset=positionOffset;

            scrollToChild(position,(int)(positionOffset* mTabsContainer.getChildAt(position).getWidth()));

            invalidate();
        }

        @Override
        public void onPageSelected(int position) {

        }

        /**
         * onPageScrollStateChanged(int state),此方法是在状态改变的时候调用
         * 其中state这个参数,有三种状态(0,1,2)。
         * state ==1的时辰默示正在滑动,state==2的时辰默示滑动完毕了,state==0的时辰默示什么都没做。
         */
        @Override
        public void onPageScrollStateChanged(int state) {
            if(state == ViewPager.SCROLL_STATE_IDLE){
                if(pager.getCurrentItem() == 0){
                    /**
                     * HorizontalScrollView的方法
                     * scrollTo(int x, int y) 是将View中内容滑动到相应的位置,参考的坐标系原点为parent View的左上角。
                     * 调用scrollTo(100, 0)表示将View中的内容移动到x = 100, y = 0的位置
                     * 参数1,x轴,参数2,y轴
                     * scrollBy(int x, int y)其实是对scrollTo的包装,移动的是相对位置。
                     */
                    scrollTo(0,0);
                }else if(pager.getCurrentItem() == tabCount-1){
                    scrollTo(getScrollRange(),0);
                }else {
                    scrollToChild(pager.getCurrentItem(),0);
                }
            }
        }
    }
电动汽车数据集:2025年3K+记录 真实电动汽车数据:特斯拉、宝马、日产车型,含2025年电池规格和销售数据 关于数据集 电动汽车数据集 这个合成数据集包含许多品牌和年份的电动汽车和插电式车型的记录,捕捉技术规格、性能、定价、制造来源、销售和安全相关属性。每一行代表由vehicle_ID标识的唯一车辆列表。 关键特性 覆盖范围:全球制造商和车型组合,包括纯电动汽车和插电式混合动力汽车。 范围:电池化学成分、容量、续航里程、充电标准和速度、价格、产地、自主水平、排放、安全等级、销售和保修。 时间跨度:模型跨度多年(包括传统和即将推出的)。 数据质量说明: 某些行可能缺少某些字段(空白)。 几个分类字段包含不同的、特定于供应商的值(例如,Charging_Type、Battery_Type)。 各列中的单位混合在一起;注意kWh、km、hr、USD、g/km和额定值。 列 列类型描述示例 Vehicle_ID整数每个车辆记录的唯一标识符。1 制造商分类汽车品牌或OEM。特斯拉 型号类别特定型号名称/变体。型号Y 与记录关联的年份整数模型。2024 电池_类型分类使用的电池化学/技术。磷酸铁锂 Battery_Capacity_kWh浮充电池标称容量,单位为千瓦时。75.0 Range_km整数表示充满电后的行驶里程(公里)。505 充电类型主要充电接口或功能。CCS、NACS、CHAdeMO、DCFC、V2G、V2H、V2L Charge_Time_hr浮动充电的大致时间(小时),上下文因充电方法而异。7.5 价格_USD浮动参考车辆价格(美元).85000.00 颜色类别主要外观颜色或饰面。午夜黑 制造国_制造类别车辆制造/组装的国家。美国 Autonomous_Level浮点自动化能力级别(例如0-5),可能包括子级别的小
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值