06Android學習從零單排之Fragment

06Android學習從零單排之Fragment

這是Android基礎學習的最後一個部分,該部分學習完成後,將不在更新“Android學習從零單排”系列blog,在這個部分學習完成後,我也將開始學習Android項目編寫。

Fragment入門

  • 在layout文件中添加2個fragment佈局
<fragment
        android:name="com.example.xwf.hsia06fragmentdemo.LeftFragment"
        android:id="@+id/left"      //必須加ID,不然就報錯
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="match_parent"/>
    <fragment
        android:name="com.example.xwf.hsia06fragmentdemo.RightFragment"
        android:id="@+id/right"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="match_parent"/>
  • 再編寫2個layout種指定的2個Fragment類文件。
public class LeftFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_left, null);
        return view;
    }
}

Fragment動態添加

  • 編寫2個Fragment文件。
  • 在Activity中通過getFragmentManager獲得FragmentTransaction事務。
  • 通過FragmentTransaction替換Fragment佈局
  • 提交事務。
    圖片資源

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //動態加載Fragment,通過屏幕的橫豎屏來動態加載
        WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
        Point point = new Point();
        wm.getDefaultDisplay().getSize(point);
        int x = point.x;
        int y = point.y;
        FragmentManager fm = getFragmentManager();
        FragmentTransaction fragmentTransaction = fm.beginTransaction();
        if (x<y) {
            fragmentTransaction.replace(android.R.id.content,new VerticalFragment());
        }else{
            fragmentTransaction.replace(android.R.id.content,new HorizontalFragment());
        }
        //提交事務
        fragmentTransaction.commit();
    }

Fragment模仿微信頁面

圖片資源

需要注意的是在onClick中需要重新獲得事務。

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        butterknife.ButterKnife.bind(this);
        btnWechat.setOnClickListener(this);
        btnContact.setOnClickListener(this);
        btnFriend.setOnClickListener(this);
        btnInformation.setOnClickListener(this);
        fm = getFragmentManager();
        //默認是微信頁面
        fm.beginTransaction().replace(R.id.ll_replace,new WeChatFragment()).commit();
    }

    @Override
    public void onClick(View v) {
        //在onClick裏面需要重新獲取事務
        FragmentTransaction ft =  fm.beginTransaction();
            switch (v.getId()) {
                case R.id.btn_wechat:
                    ft.replace(R.id.ll_replace,new WeChatFragment());
                    break;
                case R.id.btn_contact:
                    ft.replace(R.id.ll_replace,new ContactFragment());
                    break;
                case R.id.btn_friend:
                    ft.replace(R.id.ll_replace,new FriendFragment());
                    break;
                case R.id.btn_information:
                    ft.replace(R.id.ll_replace,new InformationFragment());
                    break;
            }
        ft.commit();
    }

Fragment間通信

圖片資源

主要通過getFragmentManager().findFragmentByTag(“LeftFragment”)來獲取到另一個Fragment對象,並調用裏面的方法。

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.fragment_right, null);
        Button btn = (Button) layout.findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                LeftFragment lf = (LeftFragment) getFragmentManager().findFragmentByTag("LeftFragment");
                lf.setText("數據已更改!");
            }
        });
        return layout;
    }

Android動畫集合

圖片資源
- 在res下新建一個anim文件夾,將一些動畫文件放在該文件下。
- 在Activity中通過AnimationUtils來加載各種動畫資源文件。

public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn1:
                Animation a1 = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha);
                iv.startAnimation(a1);
                break;
            case R.id.btn2:
                Animation a2 = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.rotate);
                iv.startAnimation(a2);
                break;
            case R.id.btn3:
                Animation a3 = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.scale);
                iv.startAnimation(a3);
                break;
            case R.id.btn4:
                Animation a4 = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.translate);
                iv.startAnimation(a4);
                break;
            case R.id.btn_set:
                Animation set = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.set);
                iv.startAnimation(set);
                break;
        }
    }

AutoCompleteTextView控件的學習使用

該控件主要是模糊提示,根據你的首字母,它會自動提示你可能需要輸入的內容。根據開發文檔cop一份就行了

圖片資源

private static final String[] COUNTRIES = new String[] {
            "Belgium", "France", "Italy", "Germany", "Spain"
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        AutoCompleteTextView ACTV = (AutoCompleteTextView) findViewById(R.id.actv);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_dropdown_item_1line, COUNTRIES);
        ACTV.setAdapter(adapter);
    }

關於作者
- 個人網站:北京互聯科技
- Email:[email protected]
- 項目地址:https://github.com/swordman20/Hsia06FragmentDemo.git

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章