Android开发工程师文集

Android开发工程师文集-Fragment,适配器,轮播图,ScrollView,Gallery 图片浏览器,Android常用布局样式

Fragment

1FragmentManager fragmentManager = getFragmentManager(); 2FragmentTransaction beginTransaction = fragmentManager.beginTransaction();

事务

add(),remove(),replace(),commit()

1MyFragment2 fragment2=new MyFragment2(); 2FragmentManager fragmentManager = getFragmentManager(); 3FragmentTransaction beginTransaction = fragmentManager.beginTransaction(); 4beginTransaction.add(R.id.frame,fragement2); 5beginTransaction.commit();

fragment的生命周期

Created

onAttach()->onCreate()->onCreateView()->onActivityCreated()

Started

onStart()

Resumed

onResume()

Paused

onPause()

Stopped

onStop()

Destroyed

1onDestroyView()->onDestroy()->onDetach() 2 3 4//当Fragment被添加到Activity的时候回调这个方法,并且只调用一次 5@Override 6public void onAttach(Activity activity){ 7 super.onAttach(activity); 8} 9 10 11//创建Fragment时会回调,只调用一次 12@Override 13public void onCreate(Bundle savedInstanceState){ 14 super.onCreate(savedInstanceState); 15} 16 17 18//每次创建回调 19@Override 20public View onCreateView(## ##){ 21 22} 23 24 25//当Fragment所在的Activity启动完成后调用 26@Override 27public void onActivityCreated(Bundle savedInstanceState){ 28 super.onActivityCreated(savedInstanceState); 29} 30 31 32//启动onStart() 33@Override 34public void onStart(){ 35 super.onStart(); 36} 37 38 39//onResume 40@Override 41public void onResume(){ 42 super.onResume(); 43} 44 45 46//onPause 暂停 47@Override 48public void onPause(){ 49 super.onPause(); 50} 51 52 53//onStop 停止 54@Override 55public void onStop(){ 56 super.onStop(); 57}

//last

1//onDestroyView 2@Override 3public void onDestroyView(){ 4 super.onDestroyView(); 5}

//销毁

1//onDestroy 2@Override 3public void onDestroy(){ 4 super.onDestroy(); 5}

重点
删除Fragment
//onDetach

1@Override 2public void onDetach(){ 3 super.onDetach(); 4}

启动Fragment

onAttach()->onCreate()->onCreateView()->onActivityCreated()->onStart()->onResume()

暂停Fragment - //暂停和停止的方法

onPause()->onStop()

重新看到Fragment

onStart()->onResume()

Fragment1 -> Fragment2

1Fragment1: onPause()->onStop()->onDestroyView->onDestroy()->onDetach() 2Fragment2: onAttach()->onCreate()->onCreateView()->onActivityCreated()->onStart()->onResume()

Fragment2回到主界面时

onPause()->onStop()

又重新看见

1//Fragment2回到界面 2onStart()->onResume()

Fragment2 退出

onPause()->onStop()->onDestroyView()->onDestroy()->onDetach()

Fragment与Activity

  1. Fragment是通过调用getActivity()的方法获取Activity的;
  2. Activity是通过调用FragmentManager的findFramentById()的,也可以用findFragmentByTag()方法获取Fragment片段的。

重点

1public class MyFragment extends Fragment{ 2 @Override 3 public View onCreateView(LayoutInflater inflater,ViewGrop container,Bundle savedInstanceState){ 4 return super.onCreateView(inflater,container,savedInstanceState); 5 6 //View view = inflater.inflate(R.layout.fragment, container, false); 7 //TextView tv = view.findViewById(R.id.textview); 8 //return view; 9 } 10}

一个Activity调用Fragment的界面显示数据内容

1String text = editext.getText().toString(); 2MyFragment fragment = new MyFragment(); 3Bundle bundle = new Bundle(); 4bundle.putString("name",text); 5fragment.setArguments(bundle); 6FragmentManager fragmentManager = getFragmentManager(); 7FragmentTransaction beginTransaction = fragmentManager.beginTransaction(); 8 9//beginTransaction.add(containerViewId,fragment,tag) 10beginTransaction.add(R.id.layout.textview,fragment,"fragment"); 11beginTransaction.commit();

在Fragement中设置

1public class MyFragment extends Fragment{ 2 @0verride 3 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 4 View view = inflater.infate(R.layout.fragement,container,false); 5 TextView tv=view.findViewById(R.id.textview); 6 String text = getArguments().get("name")+""; 7 tv.setText(text); 8 } 9}

Fragment

1private String name = "v"; 2public interface Myvoid 3{ 4 public void name(String name); 5}

Activity

implements Myvoid

fragment

1@Override 2public void onAttach(Activity activity){ 3 myvoid = activity; 4 super.onAttach(activity); 5}

回到Activity

覆盖方法

另类

xml

1<?xml version="1.0" encoding="utf-8"?> 2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:background="@android:color/white" 6 android:orientation="vertical"> 7 8</LinearLayout>

Fragment

1public class MyinfoFragment extends Fragment implements View.OnClickListener{ 2 3 @Override 4 public View onCreateView(LayoutInflater inflater, ViewGroup container, 5 Bundle savedInstanceState) { 6 return inflater.inflate(R.layout.fragment_myinfo, null); 7 } 8 9 @Override 10 public void onViewCreated(View view, Bundle savedInstanceState) { 11 super.onViewCreated(view, savedInstanceState); 12 } 13 14 @Override 15 public void onClick(View v) { 16 17 } 18}

MainActivity

1public class MainActivity extends FragmentActivity implements View.OnClickListener{ 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_main); 7 initView(); 8 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 9 setMain(); 10 } 11 12 @Override 13 public boolean onKeyDown(int keyCode, KeyEvent event) { 14 15 } 16 17 private void setMain() { 18 19 } 20 21 @Override 22 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 23 super.onActivityResult(requestCode, resultCode, data); 24 25 } 26 27 private void setSelectStatus(int index) { 28 switch (index){ 29 30 } 31 } 32 private void initView() { 33 34 } 35 36 @Override 37 public void onClick(View v) { 38 switch (v.getId()){ 39 40 } 41 } 42}

继续

1FragmentManager fragmentManager = getFragmentManager(); 2Fragment findFragmentById = fragmentManager.findFragmentById(R.id.fragment);

ViewPager左右滑动

1<android.support.v4.view.ViewPager 2 android:id="@+id/viewpager" 3 android:... 4 android:...> 5</android.support.v4.view.ViewPager>

ViewPager是一种容器,可以盛装两种类型的对象:一种是View对象; 也可以放置Fragment。

1getLayoutInflater().form(this); 2getLayoutInflater().form(this).inflate(resource,root);

配置Adapter:

准备数据源 -> 准备适配器 ->加载适配器

List<View>
PagerAdapter

ViewPager的声明:<android.support.v4.view.ViewPager>
是为了解决版本兼容性问题

过程

我们创建好布局文件,然后在MainActivity中添加,进行实例

准备数据源

1private List<View> viewList; 2 3 4viewList = new ArrayList<View>();

显示

View view = View.inflate(this, R.layout.view, null);

添加

viewList.add(view);

准备适配器

1@Override 2public Object instantiateItem(ViewGroup container, int position){ 3 4}

搭建构造方法

1public MyPagerAdapter(List<View> viewList){ 2 this.viewList=viewList; 3} 4 5 6container.addview(); 7return viewList.get(position); 8 9 10container.removeView(viweList.get(position));

Adapter

创建Adapter

PagerAdapter pagerAdapter = new PagerAdapter(viewList);

setAdapter(pagerAdapter);

对象

PagerTabStrip和PagerTitleStrip

1一个View显示ViewPager,然后在ViewPager中添加PagerTabStrip 2<android.support.v4.view.ViewPager 3 ... 4 <android.support.v4.view.PagerTabStrip 5 ...> 6 </android.support.v4.view.PagerTabStrip> 7</android.support.v4.view.ViewPager>

然后加入标题,private List<String> titleList;

同理,ViewPager添加题目

1titleList = new ArrayList<String>(); 2titleList.add("第一题")3titleList.add("第二题")4titleList.add("第三题")5titleList.add("第五题");

在加入PagerAdapter中,创建Adapter下创建,MyPagerAdapter.java

MyPagerAdapter.java

1public class MyPagerAdapter extends PagerAdapter{ 2 private List<View> viewList; 3 private List<String> titleList; 4 public MyPagerAdapter(List<View> viewList, List<String> titleList){ 5 this.viewList=viewList; 6 this.titleList=titleList; 7 } 8}

加入题目数量第几题
显示标题
getPageTitle(),显示所对应的标题

1@Override 2public CharSequence getPageTitle(int position){ 3 //return super.getPageTitle(position); 4 return titleList.get(position); 5}

PagerTabStrip的属性
背景

setBackgroundColor(Color.RED);
文本
setTextColor();
下划线
setDrawFullUnderline(false);
分割线
setTabIndicatorColor();

PagerTitleStrip 与 PagerTabStrip 类似

适配器

FragmentPagerAdapter

1import android.os.Bundle; 2import android.support.v4.app.Fragment; 3 4public class ExercisesFragment extends Fragment { 5 6 private ListView lvList;//来源fragment 7 private ListItemAdapter adapter; //适配器 8 private List<> ebl; //列表集合 9 10 @Override 11 public View onCreateView(LayoutInflater inflater, ViewGroup container, 12 Bundle savedInstanceState) { 13 return inflater.inflate(R.layout.fragment, null); 14 } 15 @Override 16 public void onViewCreated(View view, Bundle savedInstanceState) { 17 super.onViewCreated(view, savedInstanceState); 18 initData(); 19 lvList = view.findViewById(R.id.lv_list); 20 adapter = new ListItemAdapter(getActivity()); 21 adapter.setData(ebl); 22 lvList.setAdapter(adapter); 23 } 24 25 private void initData(){ 26 ebl = new ArrayList<Bean>(); 27 for (int i=0;i<10;i++){ 28 Bean bean = new Bean(); 29 bean.id=(i+1); 30 switch (i){ 31 case 0: 32 33 case 9: 34 35 default: 36 break; 37 } 38 } 39 } 40}

设置MyFragment继承Fragment

1public class MyFragment extends Fragment{ 2 @Override 3 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 4 return inflater.infate(R.layout.view, container, false); 5 //return inflater.infate(R.layout.view, null); 6 } 7}

点击跳转Fragment

1public void onClick(View v) { 2 switch (v.getId()){ 3 case R.id.bottom1: 4 //getSupportFragmentManager().beginTransaction().add(R.id.main_body,new CFragment()).commit(); 5 6 break; 7 case R.id.bottom2: 8 //getSupportFragmentManager().beginTransaction().add(R.id.main_body,new EFragment()).commit(); 9 10 break; 11 case R.id.bottom3: 12 //getSupportFragmentManager().beginTransaction().add(R.id.main_body,new MFragment()).commit(); 13 14 break; 15 } 16 }

实例

private List<Fragment> fragmentList;

Fragment作为数据源

1添加Fragment 2fragmentList = new ArrayList<Fragment>(); 3fragmentList.add(new Fragment()); 4添加创建的Fragment 5//fragmentList.add(new Fragment%());

导入的包

import android.support.v4.app.Fragment;

配置数据适配器

如果用FragmentPagerAdapter,一次性加载
同理

1public class MyFragment extends FragmentPagerAdapter{ 2 private List<Fragment> fragmentList; 3 private List<String> titleList; 4 public MyFragment(FragmentManager fm,List<Fragment> fragmentList,List<String> titleList){ 5 super(fm) 6 this.fragmentList=fragmentList; 7 this.titleList=titleList; 8 } 9}

MainActivity.java

1public class MainActivity extends FragmentActivity implements View.OnClickListener{ 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_main); 7 } 8 9 private void setMain() { 10 11 } 12 13 private void setSelectStatus(int index) { 14 switch (index){ 15 16 } 17 } 18 private void initView() { 19 20 } 21 22 @Override 23 public void onClick(View v) { 24 switch (v.getId()){ 25 26 //getSupportFragmentManager().beginTransaction().add(R.id.main_body,new CourseFragment()).commit(); 27 28 //getSupportFragmentManager().beginTransaction().add(R.id.main_body,new ExercisesFragment()).commit(); 29 30 //getSupportFragmentManager().beginTransaction().add(R.id.main_body,new MyinfoFragment()).commit(); 31 } 32 } 33} 34 35 36 37FragmentPagerAdapter adapter=new FragmentPagerAdapter(getSupportFragmentManager());

轮播图

ViewFlipper

自动播放

静态的方法导入:

1<ViewFlipper 2 android:id="@+id/flipper" 3 android:layout_width="match_parent" 4 android:layout_height="wrap_content" 5 android:layout_marginTop="10dp" 6 android:flipInterval="4000"> 7 <ImageView 8 android:scaleType="matrix" 9 android:id="@+id/ex2" 10 android:layout_width="match_parent" 11 android:layout_height="wrap_content"/> 12 <ImageView 13 android:scaleType="matrix" 14 android:id="@+id/ex3" 15 android:layout_width="match_parent" 16 android:layout_height="wrap_content"/> 17 <ImageView 18 android:scaleType="matrix" 19 android:id="@+id/ex4" 20 android:android:layout_width="match_parent" 21 android:layout_height="wrap_content"/> 22</ViewFlipper>

动态导入:

flipper = findViewById(R.id.flipper);
flipper.addView(getImageView(R.drawable.picture));

自己定义动态效果,一般用anim的文件夹表示:

然后创建布局界面:
创建轮播图

1<ViewFlipper 2 android:id="@+id/flipper" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent"> 5</ViewFlipper>

MainActivity.java

1public class MainActivity extends Activity { 2 @Override 3 protected void onCreate(Bundle savedInstanceState){ 4 super.onCreate(savedInstanceState); 5 setContentView(R.layout.main); 6 } 7}

声明变量

private ViewFlipper flipper;

进行初始化

flipper = findViewById(R.id.flipper);

动态导入:addView(getImageView(R.drawable.picture));

轮播图有多张图片,创建数组,分别导入

获取图片

1private ImageView getImageView(int imageId){ 2 ImageView image = new ImageView(this); 3 image.setImageResource(imageId); 4 return image; 5} 6 7 8for(int i=0; i<imageId.length;i++){ 9 flipper.addView(getImageView( 数组[i] )); 10}

手势滑动的方法

1@Override 2public boolean onTouchEvent(MotionEvent event){ 3 return super.onTouchEvent(event); 4}

自动播放效果:

1flipper.setFlipInterval(3000); 2flipper.startFlipping();

ScrollView

HorizontalScrollView,ScrollView

滚动视图

不能滚动,因为布局不是ScrollVeiw,而是<TextView>

tv.setText(getResources().getString(R.string.content));

如果是这样就可以

1<ScrollView 2 android:layout_width="match_parent" 3 android:layout_height="wrap_content" 4 <TextView 5 android:layout_width="match_parent" 6 android:layout_height="wrap_content"/> 7</ScrollView>

setOnTouchListener的方法

1scroll.setOnTouchListener(new OnTouchListener){ 2 3}

记得 scrollBy 和 scrollTo 的区别

Gallery 图片浏览器

Gallery像一个走廊,ImageSwitcher像幻灯片

显示图片,就要对图片进行封装,声明数组

1布局 2<Gallery 3 android:... 4 /> 5 老样子

图片id,private int[] res 定义数组

我们学过的适配器,都是继承BaseAdapter

1ArrayAdapter<String> adapter; 2SimpleAdapter adapter;

继承BaseAdapter中必须要实现的方法

  1. public int getCount()

  2. public long getItemId(int position)

  3. public Object getItem(int position)

  4. public View gtView(int position, View convertView, ViewGroup parent)

如果自己定义一个适配器,定义后,实现BaseAdapter中的方法,
然后创建构造函数

1private int[] images; 2public ImageAdapter(int []images) 3{ 4 this.images = images; 5}

说明

获取视图

1private Context context; 2public ImageAdapter(int[] images, Context context){ 3 this.images = images; 4 this.context = context; 5}

public View gtView(int position, View convertView, ViewGroup parent)

1{ 2 //ImageView image=new ImageView(this); 3 4 ImageView image = new ImageView(context); 5 image.setBackgroundResource(数组[position]); 6 //设置图片大小 7 image.setLayoutParams(new Gallery.LayoutParams(400,300)); 8 return image; 9}

加载适配器 MainActivity.java

声明适配器: private ImageAdapter adapter;

初始化: adapter = new ImageAdapter(数组的变量名,上下文(this));

gallery.setAdapter(adapter);

无限制浏览

return Interger.MAX_VALUE;

监听器

setOnItemSelectedListener(this);

同样<ImageSwitcher>也要布局

声明 private ImageSwitcher is;

进行初始化 is = findViewById(R.id.is);

监听器:gallery.setOnItemSelectedListener(this);

现实的接口:implements OnItemSelectedListener,ViewFactory

1public View makeView(){ 2 3}

is.setFactory(this);

1public View makeView(){ 2 ImageView image = new ImageView(this); 3 4 return image; 5}

SeekBar 拖动进度条

setOnSeekBarChangeListener(this);

1<SeekBar 2 style="@android:style/Widget.SeekBar" 3 /> 4 5 6<selecter xmlns:android="http...." 7 <item 8 android:android:state_pressed="true" 9 android:state_window_focused="true" 10 andeoid:drawable=""/>

Android常用布局样式

线性布局
LinearLayout

相对布局
RelativeLayout

表格布局
TableLayout

可以使用GridView替代

绝对布局
AbsoluteLayout

帧布局(主要布局叠加)
FrameLayout

多用LinearLayout和RelativeLayout

少用AbsoluteLayout

定位:分享 Android&Java 知识点

本文同步分享在 博客“程序员哆啦A梦”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )