抽取基類 Activity 和 Fragment
阿新 • • 發佈:2019-01-11
效果沒發生變化
程式碼變得更加簡潔
以下是程式碼步驟
只需建立兩個類 繼承即可
BaseFragment
package com.example.chouqujilei.base; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; //繼承Fragment public abstract class BaseFragment extends Fragment { //onCreateView //getLayoutId() 是一個方法 @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(getLayoutId(),container,false); } //onViewCreate //再寫其他兩個方法 initView(view); initData(); //view不要忘寫 @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { initView(view); initData(); } //上面寫出來方法名 下面快捷鍵生成 protected abstract void initData(); protected abstract void initView(View view); protected abstract int getLayoutId(); }
Fragment
package com.example.chouqujilei.fragment; import android.view.View; import com.example.chouqujilei.R; import com.example.chouqujilei.base.BaseFragment; //1.繼承BaseFragment public class FragmentThree extends BaseFragment { @Override protected void initData() { } @Override protected void initView(View view) { } @Override protected int getLayoutId() { // 2.直接獲取佈局 return R.layout.fragment_03; } }
BaseActivity
package com.example.chouqujilei.base; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; //繼承AppCompatActivity public abstract class BaseActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); //寫三個方法 setContentView(getLayoutId()); initView(); initData(); } //下面自動生成 protected abstract void initData(); protected abstract void initView(); protected abstract int getLayoutId(); }
Activity
package com.example.d14;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.RadioGroup;
import com.example.d14.base.BaseActivity;
import com.example.d14.fragment.FragmentA;
import com.example.d14.fragment.FragmentB;
import com.example.d14.fragment.FragmentC;
//繼承BaseActivity
public class MainActivity extends BaseActivity {
private RadioGroup group;
private FrameLayout frag;
private FragmentA fragmentA;
private FragmentB fragmentB;
private FragmentC fragmentC;
private FragmentTransaction fragmentTransaction;
//寫方法
@Override
protected void initData() {
//寫監聽 點選切換 隱藏
group.check(group.getChildAt(0).getId());
group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
FragmentTransaction fragmentTransaction1 = getSupportFragmentManager().beginTransaction();
switch (checkedId){
case R.id.but1:
fragmentTransaction1.show(fragmentA).hide(fragmentB).hide(fragmentC);
break;
case R.id.but2:
fragmentTransaction1.show(fragmentB).hide(fragmentA).hide(fragmentC);
break;
case R.id.but3:
fragmentTransaction1.show(fragmentC).hide(fragmentB).hide(fragmentA);
break;
}
fragmentTransaction1.commit();
}
});
}
//2.得到id
@Override
protected void initView() {
group = findViewById(R.id.group);
frag = findViewById(R.id.frag);
//得到fragment
fragmentA = new FragmentA();
fragmentB = new FragmentB();
fragmentC = new FragmentC();
//得到管理 開啟事務
fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.frag,fragmentA);
fragmentTransaction.add(R.id.frag,fragmentB);
fragmentTransaction.add(R.id.frag,fragmentC);
//預設展示A 隱藏BC
fragmentTransaction.show(fragmentA).hide(fragmentB).hide(fragmentC).commit();
//調取方法
initData();
}
//1.獲取佈局
@Override
protected int getLayoutId() {
return R.layout.activity_main;
}
}