Android開發工程師文集-Fragment,適配器,輪播圖,ScrollView,Gallery 圖片瀏覽器,Android經常使用佈局樣式

Android開發工程師文集-Fragment,適配器,輪播圖,ScrollView,Gallery 圖片瀏覽器,Android經常使用佈局樣式java

Fragment

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

事務android

add(),remove(),replace(),commit()數組

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

fragment的生命週期瀏覽器

Createdapp

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

Startedide

onStart()

Resumed函數

onResume()

Paused佈局

onPause()

Stoppedthis

onStop()

Destroyedcode

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像一個走廊,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 知識點

相關文章
相關標籤/搜索