5-AVI–Fragment簡單封裝

張風捷特烈發表於2018-08-29

零、前言

[1].每次寫Fragment要載入佈局,為佈局設定內容,挺麻煩的,搞個基類簡單封裝一下吧
[2].一般封裝基類使用模板方法設計模式,基類中做一些常用的不變東西,需要拐點彎的邏輯就弄個抽象方法延遲到子類
[3].textView設定文字,ImageView設定圖片兩個經常用的方法也提供一下

Fragment封裝.png

一、程式碼實現

1.使用:EVAFragment繼承
public class EVAFragment extends BaseFragment {
    
    @Override
    protected void render(View rootView) {
        setTextView(R.id.f_tv_title, "封裝Fragment").
                setImageView(R.id.f_iv_back, R.mipmap.ic_launcher);
    }

    @Override
    protected int setLayoutId() {
        return R.layout.fragment_title;
    }
}
2.Activity
getFragmentManager().beginTransaction().add(R.id.fl_title, new EVAFragment()).commit();
3.封裝的基類
/**
 * 作者:張風捷特烈<br/>
 * 時間:2018/8/29 0029:13:46<br/>
 * 郵箱:1981462002@qq.com<br/>
 * 說明:Fragment封裝類
 */
public abstract class BaseFragment extends Fragment {

    private View mRootView;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater,
                             @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        //載入佈局
        mRootView = inflater.inflate(setLayoutId(), container, false);
        render(mRootView);
        return mRootView;
    }


    /**
     * 設定佈局裡的控制元件
     *
     */
    protected abstract void render(View rootView);

    /**
     * 設定佈局id
     * @return 佈局id
     */
    protected abstract int setLayoutId();

    /**
     * 找出對應的控制元件
     *
     * @param id  控制元件id
     * @param <T> 控制元件型別
     * @return 控制元件
     */
    protected <T extends View> T findViewById(int id) {
        return (T) mRootView.findViewById(id);
    }

    /**
     * 為textView設定文字
     *
     * @param viewId TextView控制元件id
     * @param str 控制元件id
     * @return BaseFragment
     */
    protected BaseFragment setTextView(int viewId, String str) {
        TextView textView = findViewById(viewId);
        textView.setText(str);
        return this;
    }

    /**
     * 通過id設定ImageView圖片
     *
     * @param viewId 條目內部控制元件的id
     * @param o  圖片物件
     * @return BaseFragment
     */
    public BaseFragment setImageView(int viewId, Object o) {
        ImageView view = findViewById(viewId);
        if (o instanceof Integer) {
            view.setImageResource((Integer) o);
        } else if (o instanceof Bitmap) {
            view.setImageBitmap((Bitmap) o);
        }
        return this;
    }

}


附錄、佈局檔案:

activity.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".activity.ActFragmentActivity">
    
    <FrameLayout
        android:id="@+id/fl_title"
        android:layout_width="match_parent"
        android:layout_height="60dp">
    </FrameLayout>
</LinearLayout>
fragment_title.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:tools="http://schemas.android.com/tools"
             android:layout_width="match_parent"
             android:layout_height="60dp"
                android:id="@+id/f_rl_root"
                android:background="#7383DF">
    <ImageView
        android:id="@+id/f_iv_back"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:paddingLeft="15dp"
        android:layout_centerVertical="true"
        android:src="@drawable/back"/>
    <TextView
        android:id="@+id/f_tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="張風捷特烈"
        android:textColor="#fff"
        android:layout_centerInParent="true"
        android:textSize="26dp"/>

</RelativeLayout>


後記、

1.宣告:

[1]本文由張風捷特烈原創,轉載請註明
[2]歡迎廣大程式設計愛好者共同交流
[3]個人能力有限,如有不正之處歡迎大家批評指證,必定虛心改正
[4]你的喜歡與支援將是我最大的動力

2.連線傳送門:

更多安卓技術歡迎訪問:安卓技術棧
我的github地址:歡迎star
簡書首發,騰訊雲+社群同步更新
張風捷特烈個人網站,程式設計筆記請訪問:http://www.toly1994.com

3.聯絡我

QQ:1981462002
郵箱:1981462002@qq.com
微信:zdl1994328

4.歡迎關注我的微信公眾號,最新精彩文章,及時送達:
公眾號.jpg


相關文章