Android开发工程师文集-Fragment,适配器,轮播图,ScrollView,Gallery 图片浏览器,Android常用布局样式
Android开发工程师文集-Fragment,适配器,轮播图,ScrollView,Gallery 图片浏览器,Android常用布局样式
Fragment
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction beginTransaction = fragmentManager.beginTransaction();
事务
add(),remove(),replace(),commit()
MyFragment2 fragment2=new MyFragment2();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction beginTransaction = fragmentManager.beginTransaction();
beginTransaction.add(R.id.frame,fragement2);
beginTransaction.commit();
fragment的生命周期
Created
onAttach()->onCreate()->onCreateView()->onActivityCreated()
Started
onStart()
Resumed
onResume()
Paused
onPause()
Stopped
onStop()
Destroyed
onDestroyView()->onDestroy()->onDetach()
//当Fragment被添加到Activity的时候回调这个方法,并且只调用一次
@Override
public void onAttach(Activity activity){
super.onAttach(activity);
}
//创建Fragment时会回调,只调用一次
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
//每次创建回调
@Override
public View onCreateView(## ##){
}
//当Fragment所在的Activity启动完成后调用
@Override
public void onActivityCreated(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
}
//启动onStart()
@Override
public void onStart(){
super.onStart();
}
//onResume
@Override
public void onResume(){
super.onResume();
}
//onPause 暂停
@Override
public void onPause(){
super.onPause();
}
//onStop 停止
@Override
public void onStop(){
super.onStop();
}
//last
//onDestroyView
@Override
public void onDestroyView(){
super.onDestroyView();
}
//销毁
//onDestroy
@Override
public void onDestroy(){
super.onDestroy();
}
重点
删除Fragment
//onDetach
@Override
public void onDetach(){
super.onDetach();
}
启动Fragment
onAttach()->onCreate()->onCreateView()->onActivityCreated()->onStart()->onResume()
暂停Fragment - //暂停和停止的方法
onPause()->onStop()
重新看到Fragment
onStart()->onResume()
Fragment1 -> Fragment2
Fragment1: onPause()->onStop()->onDestroyView->onDestroy()->onDetach()
Fragment2: onAttach()->onCreate()->onCreateView()->onActivityCreated()->onStart()->onResume()
Fragment2回到主界面时
onPause()->onStop()
又重新看见
//Fragment2回到界面
onStart()->onResume()
Fragment2 退出
onPause()->onStop()->onDestroyView()->onDestroy()->onDetach()
Fragment与Activity
- Fragment是通过调用getActivity()的方法获取Activity的;
- Activity是通过调用FragmentManager的findFramentById()的,也可以用findFragmentByTag()方法获取Fragment片段的。
重点
public class MyFragment extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater,ViewGrop container,Bundle savedInstanceState){
return super.onCreateView(inflater,container,savedInstanceState);
//View view = inflater.inflate(R.layout.fragment, container, false);
//TextView tv = view.findViewById(R.id.textview);
//return view;
}
}
一个Activity调用Fragment的界面显示数据内容
String text = editext.getText().toString();
MyFragment fragment = new MyFragment();
Bundle bundle = new Bundle();
bundle.putString("name",text);
fragment.setArguments(bundle);
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction beginTransaction = fragmentManager.beginTransaction();
//beginTransaction.add(containerViewId,fragment,tag)
beginTransaction.add(R.id.layout.textview,fragment,"fragment");
beginTransaction.commit();
在Fragement中设置
public class MyFragment extends Fragment{
@0verride
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View view = inflater.infate(R.layout.fragement,container,false);
TextView tv=view.findViewById(R.id.textview);
String text = getArguments().get("name")+"";
tv.setText(text);
}
}
Fragment
private String name = "v";
public interface Myvoid
{
public void name(String name);
}
Activity
implements Myvoid
fragment
@Override
public void onAttach(Activity activity){
myvoid = activity;
super.onAttach(activity);
}
回到Activity
覆盖方法
另类
xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:orientation="vertical">
</LinearLayout>
Fragment
public class MyinfoFragment extends Fragment implements View.OnClickListener{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_myinfo, null);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
@Override
public void onClick(View v) {
}
}
MainActivity
public class MainActivity extends FragmentActivity implements View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setMain();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
}
private void setMain() {
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
private void setSelectStatus(int index) {
switch (index){
}
}
private void initView() {
}
@Override
public void onClick(View v) {
switch (v.getId()){
}
}
}
继续
FragmentManager fragmentManager = getFragmentManager();
Fragment findFragmentById = fragmentManager.findFragmentById(R.id.fragment);
ViewPager左右滑动
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:...
android:...>
</android.support.v4.view.ViewPager>
ViewPager是一种容器,可以盛装两种类型的对象:一种是View对象; 也可以放置Fragment。
getLayoutInflater().form(this);
getLayoutInflater().form(this).inflate(resource,root);
配置Adapter:
准备数据源 -> 准备适配器 ->加载适配器
List
PagerAdapter
ViewPager的声明:<android.support.v4.view.ViewPager>
是为了解决版本兼容性问题
过程
我们创建好布局文件,然后在MainActivity中添加,进行实例
准备数据源
private List<View> viewList;
viewList = new ArrayList<View>();
显示
View view = View.inflate(this, R.layout.view, null);
添加
viewList.add(view);
准备适配器
@Override
public Object instantiateItem(ViewGroup container, int position){
}
搭建构造方法
public MyPagerAdapter(List<View> viewList){
this.viewList=viewList;
}
container.addview();
return viewList.get(position);
container.removeView(viweList.get(position));
Adapter
创建Adapter
PagerAdapter pagerAdapter = new PagerAdapter(viewList);
setAdapter(pagerAdapter);
对象
PagerTabStrip和PagerTitleStrip
一个View显示ViewPager,然后在ViewPager中添加PagerTabStrip
<android.support.v4.view.ViewPager
...
<android.support.v4.view.PagerTabStrip
...>
</android.support.v4.view.PagerTabStrip>
</android.support.v4.view.ViewPager>
然后加入标题,private List<String> titleList;
同理,ViewPager添加题目
titleList = new ArrayList<String>();
titleList.add("第一题");
titleList.add("第二题");
titleList.add("第三题");
titleList.add("第五题");
在加入PagerAdapter中,创建Adapter下创建,MyPagerAdapter.java
MyPagerAdapter.java
public class MyPagerAdapter extends PagerAdapter{
private List<View> viewList;
private List<String> titleList;
public MyPagerAdapter(List<View> viewList, List<String> titleList){
this.viewList=viewList;
this.titleList=titleList;
}
}
加入题目数量第几题
显示标题
getPageTitle(),显示所对应的标题
@Override
public CharSequence getPageTitle(int position){
//return super.getPageTitle(position);
return titleList.get(position);
}
PagerTabStrip的属性
背景
setBackgroundColor(Color.RED);
文本
setTextColor();
下划线
setDrawFullUnderline(false);
分割线
setTabIndicatorColor();
PagerTitleStrip 与 PagerTabStrip 类似
适配器
FragmentPagerAdapter
import android.os.Bundle;
import android.support.v4.app.Fragment;
public class ExercisesFragment extends Fragment {
private ListView lvList;//来源fragment
private ListItemAdapter adapter; //适配器
private List<> ebl; //列表集合
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment, null);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
initData();
lvList = view.findViewById(R.id.lv_list);
adapter = new ListItemAdapter(getActivity());
adapter.setData(ebl);
lvList.setAdapter(adapter);
}
private void initData(){
ebl = new ArrayList<Bean>();
for (int i=0;i<10;i++){
Bean bean = new Bean();
bean.id=(i+1);
switch (i){
case 0:
case 9:
default:
break;
}
}
}
}
设置MyFragment继承Fragment
public class MyFragment extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
return inflater.infate(R.layout.view, container, false);
//return inflater.infate(R.layout.view, null);
}
}
点击跳转Fragment
public void onClick(View v) {
switch (v.getId()){
case R.id.bottom1:
//getSupportFragmentManager().beginTransaction().add(R.id.main_body,new CFragment()).commit();
break;
case R.id.bottom2:
//getSupportFragmentManager().beginTransaction().add(R.id.main_body,new EFragment()).commit();
break;
case R.id.bottom3:
//getSupportFragmentManager().beginTransaction().add(R.id.main_body,new MFragment()).commit();
break;
}
}
实例
private List<Fragment> fragmentList;
Fragment作为数据源
添加Fragment
fragmentList = new ArrayList<Fragment>();
fragmentList.add(new Fragment());
添加创建的Fragment
//fragmentList.add(new Fragment%());
导入的包
import android.support.v4.app.Fragment;
配置数据适配器
如果用FragmentPagerAdapter,一次性加载
同理
public class MyFragment extends FragmentPagerAdapter{
private List<Fragment> fragmentList;
private List<String> titleList;
public MyFragment(FragmentManager fm,List<Fragment> fragmentList,List<String> titleList){
super(fm)
this.fragmentList=fragmentList;
this.titleList=titleList;
}
}
MainActivity.java
public class MainActivity extends FragmentActivity implements View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
private void setMain() {
}
private void setSelectStatus(int index) {
switch (index){
}
}
private void initView() {
}
@Override
public void onClick(View v) {
switch (v.getId()){
//getSupportFragmentManager().beginTransaction().add(R.id.main_body,new CourseFragment()).commit();
//getSupportFragmentManager().beginTransaction().add(R.id.main_body,new ExercisesFragment()).commit();
//getSupportFragmentManager().beginTransaction().add(R.id.main_body,new MyinfoFragment()).commit();
}
}
}
FragmentPagerAdapter adapter=new FragmentPagerAdapter(getSupportFragmentManager());
轮播图
ViewFlipper
自动播放
静态的方法导入:
<ViewFlipper
android:id="@+id/flipper"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:flipInterval="4000">
<ImageView
android:scaleType="matrix"
android:id="@+id/ex2"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<ImageView
android:scaleType="matrix"
android:id="@+id/ex3"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<ImageView
android:scaleType="matrix"
android:id="@+id/ex4"
android:android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</ViewFlipper>
动态导入:
flipper = findViewById(R.id.flipper);
flipper.addView(getImageView(R.drawable.picture));
自己定义动态效果,一般用anim的文件夹表示:
然后创建布局界面:
创建轮播图
<ViewFlipper
android:id="@+id/flipper"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ViewFlipper>
MainActivity.java
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
声明变量
private ViewFlipper flipper;
进行初始化
flipper = findViewById(R.id.flipper);
动态导入:addView(getImageView(R.drawable.picture));
轮播图有多张图片,创建数组,分别导入
获取图片
private ImageView getImageView(int imageId){
ImageView image = new ImageView(this);
image.setImageResource(imageId);
return image;
}
for(int i=0; i<imageId.length;i++){
flipper.addView(getImageView( 数组[i] ));
}
手势滑动的方法
@Override
public boolean onTouchEvent(MotionEvent event){
return super.onTouchEvent(event);
}
自动播放效果:
flipper.setFlipInterval(3000);
flipper.startFlipping();
ScrollView
HorizontalScrollView,ScrollView
滚动视图
不能滚动,因为布局不是ScrollVeiw,而是<TextView>
tv.setText(getResources().getString(R.string.content));
如果是这样就可以
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</ScrollView>
setOnTouchListener的方法
scroll.setOnTouchListener(new OnTouchListener){
}
记得 scrollBy 和 scrollTo 的区别
Gallery 图片浏览器
Gallery像一个走廊,ImageSwitcher像幻灯片
显示图片,就要对图片进行封装,声明数组
布局
<Gallery
android:...
/>
老样子
图片id,private int[] res 定义数组
我们学过的适配器,都是继承BaseAdapter
ArrayAdapter<String> adapter;
SimpleAdapter adapter;
继承BaseAdapter中必须要实现的方法
public int getCount()
public long getItemId(int position)
public Object getItem(int position)
public View gtView(int position, View convertView, ViewGroup parent)
如果自己定义一个适配器,定义后,实现BaseAdapter中的方法,
然后创建构造函数
private int[] images;
public ImageAdapter(int []images)
{
this.images = images;
}
说明
获取视图
private Context context;
public ImageAdapter(int[] images, Context context){
this.images = images;
this.context = context;
}
public View gtView(int position, View convertView, ViewGroup parent)
{
//ImageView image=new ImageView(this);
ImageView image = new ImageView(context);
image.setBackgroundResource(数组[position]);
//设置图片大小
image.setLayoutParams(new Gallery.LayoutParams(400,300));
return image;
}
加载适配器 MainActivity.java
声明适配器: private ImageAdapter adapter;
初始化: adapter = new ImageAdapter(数组的变量名,上下文(this));
gallery.setAdapter(adapter);
无限制浏览
return Interger.MAX_VALUE;
监听器
setOnItemSelectedListener(this);
同样也要布局
声明 private ImageSwitcher is;
进行初始化 is = findViewById(R.id.is);
监听器:gallery.setOnItemSelectedListener(this);
现实的接口:implements OnItemSelectedListener,ViewFactory
public View makeView(){
}
is.setFactory(this);
public View makeView(){
ImageView image = new ImageView(this);
return image;
}
SeekBar 拖动进度条
setOnSeekBarChangeListener(this);
<SeekBar
style="@android:style/Widget.SeekBar"
/>
<selecter xmlns:android="http...."
<item
android:android:state_pressed="true"
android:state_window_focused="true"
andeoid:drawable=""/>
Android常用布局样式
线性布局
LinearLayout
相对布局
RelativeLayout
表格布局
TableLayout
可以使用GridView替代
绝对布局
AbsoluteLayout
帧布局(主要布局叠加)
FrameLayout
多用LinearLayout和RelativeLayout
少用AbsoluteLayout
定位:分享 Android&Java 知识点
Android开发工程师文集-Fragment,适配器,轮播图,ScrollView,Gallery 图片浏览器,Android常用布局样式的更多相关文章
- Android开发工程师文集-相关控件的讲解,五大布局
前言 大家好,给大家带来Android开发工程师文集-相关控件的讲解,五大布局的概述,希望你们喜欢 TextView控件 TextView控件有哪些属性: android:id->控件的id a ...
- Android开发工程师文集-Android知识点讲解
前言 大家好,给大家带来Android开发工程师文集-Android知识点讲解的概述,希望你们喜欢 WebView讲解 一般通过Intent调用系统的浏览器: Uri uri = Uri.parse( ...
- Android开发工程师文集-Activity生命周期,启动方式,Intent相关介绍,Activity详细讲解
前言 大家好,给大家带来Android开发工程师文集-Activity生命周期,启动方式,Intent相关介绍,Activity详细讲解的概述,希望你们喜欢 Activity是什么 作为一个Activ ...
- Android开发工程师文集-layout_weight讲解
前言 大家好,给大家带来Android开发工程师文集-layout_weight讲解的概述,希望你们喜欢 Layout_weight的相关代码展示 <TextView android:layou ...
- Android开发工程师文集-1 小时学会Widget小组件开发
前言 大家好,给大家带来Android开发工程师文集-1 小时学会Widget小组件开发的概述,希望你们喜欢 学会用Widget (小组件) Widget小组件很方便,很快捷,可以个性化,自己定制,相 ...
- Android开发工程师文集-1 小时学会各种Drawable
前言 大家好,给大家带来Android开发工程师文集-1 小时学会各种Drawable的概述,希望你们喜欢 Drawable介绍 Drawable为抽象类,drawable与view有区别的地方,主要 ...
- Android开发工程师文集-1 小时学会SQLite
前言 大家好,给大家带来Android开发工程师文集-1 小时学会SQLite的概述,希望你们喜欢 内容 什么是Sqlite: 效率高,开源,小型,程序驱动,支持事务操作,无数据类型,可嵌入的关系型数 ...
- 微信小程序从零开始开发步骤(五)轮播图
上一章完成页面自定义分享,这一章来说说轮播图,最常见的一个轮播图,中间带小圆点,自动轮播. Swiper是滑动特效插件,面向手机.平板电脑等移动终端.能实现触屏焦点图.触屏Tab切换.触屏多图切换等常 ...
- Android开发进程0.1 轮播图 Scrollview Fragment
轮播图的实现 轮播图通过banner可以较为便捷的实现 1.添加本地依赖,在dependence中搜索相关依赖 2.添加banner的view组件 3.创建适配器GlideImageLoader ex ...
随机推荐
- html:class名命名规范
1 前端开发命名规范 1.1 为什么要制定CSS命名规范 统一的命名规范,便于多人开发维护时代码统一,减少项目沟通和交接的成本,增加代码的语义化. 1.2 CSS命名规则 样式类名全部用小写,首字符必 ...
- jQuery 新添加元素事件绑定无效
jQuery中事件绑定,大多使用on就足够了. 但是对于新添加的元素 on 的绑定事件 会不起作用. 因为 append 中的 节点是在整个文档加载之后才添加的,页面并不会为未来的元素初始化添加点击事 ...
- P45 实践作业
1. 影评: 观众数量多少,决定被虐者死亡速度的快慢.这一新奇但是残忍的想法,无疑是<网络杀机>的点睛之笔.公众.媒体对凶手网站主造成的伤害,比起那些用恶毒言论还要让人难受千百倍.他是一个 ...
- mysql修改密码方法
1. 修改密码有三种方法:1.1 ---->用mysqladmin修改密码格式:mysqladmin -u用户名 -p旧密码 password 新密码 例子:# mysqladmin -uroo ...
- Python自动化测试用例设计--测试类型
1.前言 WEB自动化测试时候测试哪些类型,下面将介绍一下: 2. 测试类型 2.1 测试静态内容 静态内容测试是最简单的测试,用于验证静态的.不变化的UI 元素的存在性.例如: 每个页面都有其预期的 ...
- TPL DataFlow初探(一)
属性TPL Dataflow是微软面向高并发应用而推出的一个类库.借助于异步消息传递与管道,它可以提供比线程池更好的控制,也比手工线程方式具备更好的性能.我们常常可以消息传递,生产-消费模式或Acto ...
- 集群环境下定时调度的解决方案之Quartz集群
集群环境可能出现的问题 在上一篇博客我们介绍了如何在自己的项目中从无到有的添加了Quartz定时调度引擎,其实就是一个Quartz 和Spring的整合过程,很容易实现,但是我们现在企业中项目通常都是 ...
- eclipse 如何安装freemaker ftl 插件
借鉴原链接 https://blog.csdn.net/lsygood/article/details/80565933 在线安装的方法是:Help –> Install New Softw ...
- Python开发——数据类型【运算符】
算数运算符 比较运算符 赋值运算符 逻辑运算符 成员运算符
- application/json和application/x-www-form-urlencoded使用选择
一.参考资料 选application/x-www-form-urlencoded还是application/json? @RequestBody应用 二.理解 1.@RequestBody的作用 注 ...