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

  1. Fragment是通过调用getActivity()的方法获取Activity的;
  2. 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中必须要实现的方法

  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中的方法,

然后创建构造函数

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常用布局样式的更多相关文章

  1. Android开发工程师文集-相关控件的讲解,五大布局

    前言 大家好,给大家带来Android开发工程师文集-相关控件的讲解,五大布局的概述,希望你们喜欢 TextView控件 TextView控件有哪些属性: android:id->控件的id a ...

  2. Android开发工程师文集-Android知识点讲解

    前言 大家好,给大家带来Android开发工程师文集-Android知识点讲解的概述,希望你们喜欢 WebView讲解 一般通过Intent调用系统的浏览器: Uri uri = Uri.parse( ...

  3. Android开发工程师文集-Activity生命周期,启动方式,Intent相关介绍,Activity详细讲解

    前言 大家好,给大家带来Android开发工程师文集-Activity生命周期,启动方式,Intent相关介绍,Activity详细讲解的概述,希望你们喜欢 Activity是什么 作为一个Activ ...

  4. Android开发工程师文集-layout_weight讲解

    前言 大家好,给大家带来Android开发工程师文集-layout_weight讲解的概述,希望你们喜欢 Layout_weight的相关代码展示 <TextView android:layou ...

  5. Android开发工程师文集-1 小时学会Widget小组件开发

    前言 大家好,给大家带来Android开发工程师文集-1 小时学会Widget小组件开发的概述,希望你们喜欢 学会用Widget (小组件) Widget小组件很方便,很快捷,可以个性化,自己定制,相 ...

  6. Android开发工程师文集-1 小时学会各种Drawable

    前言 大家好,给大家带来Android开发工程师文集-1 小时学会各种Drawable的概述,希望你们喜欢 Drawable介绍 Drawable为抽象类,drawable与view有区别的地方,主要 ...

  7. Android开发工程师文集-1 小时学会SQLite

    前言 大家好,给大家带来Android开发工程师文集-1 小时学会SQLite的概述,希望你们喜欢 内容 什么是Sqlite: 效率高,开源,小型,程序驱动,支持事务操作,无数据类型,可嵌入的关系型数 ...

  8. 微信小程序从零开始开发步骤(五)轮播图

    上一章完成页面自定义分享,这一章来说说轮播图,最常见的一个轮播图,中间带小圆点,自动轮播. Swiper是滑动特效插件,面向手机.平板电脑等移动终端.能实现触屏焦点图.触屏Tab切换.触屏多图切换等常 ...

  9. Android开发进程0.1 轮播图 Scrollview Fragment

    轮播图的实现 轮播图通过banner可以较为便捷的实现 1.添加本地依赖,在dependence中搜索相关依赖 2.添加banner的view组件 3.创建适配器GlideImageLoader ex ...

随机推荐

  1. TXLSReadWriteII5 单元格读写

    unit Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, ...

  2. oracle 连接字符串的问题

    未指定的错误,发生了一个 Oracle 错误,但无法从 Oracle 中检索错误信息.数据类型不被支持. 原因是你用的ADO   for   ORACLE的驱动是微软的Microsoft OLE DB ...

  3. mysql 查询结果集按照指定的字段值顺序排序

    mysql 查询结果如果不给予指定的order by ,那么mysql会按照主键顺序(innodb引擎)对结果集加以排序,那么最后的排序可能就不是你想要的排序结果. 举个例子,我要按照前端传过来的mo ...

  4. 整数中1出现的次数(从1到n整数中1出现的次数)(python)

    题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...

  5. poj3273(二分)

    题目链接:https://vjudge.net/problem/POJ-3273 题意:给定n个数,将这n个数划分成m块,问所有块最大值的最小是多少. 思路:注意到所求值最大为109,所以可以用二分来 ...

  6. python命名规则

    1 包.模块的命名规则:全部以小写字母形式来命名.比如:import random 2 类.对象的命名规则:类是每个单词的首字母要大写,其他字母小写比如:class MyFamily: ,类的私有属性 ...

  7. [Java核心技术笔记]并发

    Runnable Runnable接口是函数式接口 //Runnable接口 public interface Runnable { void run(); } //用lambda表达式创建实例 Ru ...

  8. Mybatis配置问题解决Invalid bound statement (not found)

    首先这个异常的原因是系统根据Mapper类的方法名找不到对应的映射文件. 网上也搜索了到了类似的文章,一般可以从以下几个点排查: mapper.xml的namespace要写所映射接口的全称类名,而且 ...

  9. React-router4 简单总结

    官方文档读到这里,大概明白了React-router是专门为单页面设计的,,我只能说多页面格外的不方便 首先这个是基本的套路 import React from 'react' import Reac ...

  10. 探索未知种族之osg类生物---呼吸分解之更新循环二

    _scene->updateSceneGraph(*_updateVisitor); 我们用了前面4节才刚刚算是完成对DatabasePager::DatabaseThread::run()函数 ...