AndroidはView Stubを使って、多状態ページ切り替えベースクラスを実現します.
3862 ワード
1、View Stubの基本使用:
(1):レイアウトファイル
(2):コードコール表示View Stub
自分のニーズに合わせて拡張できます.
(1):レイアウトファイル
Android:layout:引用のレイアウトファイルです. (2):コードコール表示View Stub
try {
// inflate , inflate
View inflated = mVSLoading.inflate();
AutoUtils.auto(inflated);
} catch (Exception e) {
// inflate , setVisibility
mVSLoading.setVisibility(View.VISIBLE);
}
2、状態動的にactivityの基質を切り替える実現:public abstract class BaseActivity extends AppCompatActivity {
private ViewStub mVSLoading;
private ViewStub mVSFailedToLoad;
private ViewStub mVSNetworkError;
private ViewStub mVSEmptyData;
private ViewStub mVSNormalData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_base);
initView();
}
private void initView() {
mVSLoading = findViewById(R.id.vs_loading);
mVSFailedToLoad = findViewById(R.id.vs_failed_to_load);
mVSNetworkError = findViewById(R.id.vs_network_error);
mVSEmptyData = findViewById(R.id.vs_empty_data);
mVSNormalData = findViewById(R.id.vs_normal_data);
}
@Override
public void setContentView(int id) {
mVSNormalData.setLayoutResource(id);
}
protected void setVSLoading() {
initVisibility();
try {
// inflate , inflate
View inflated = mVSLoading.inflate();
} catch (Exception e) {
// inflate , , setVisibility
mVSLoading.setVisibility(View.VISIBLE);
}
}
public void setVSFailedToLoad() {
initVisibility();
try {
// inflate , inflate
View inflated = mVSFailedToLoad.inflate();
TextView textView = inflated.findViewById(R.id.textView);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
setOnClickRefresh();
}
});
} catch (Exception e) {
// inflate , , setVisibility
mVSFailedToLoad.setVisibility(View.VISIBLE);
}
}
public void setVSNetworkError() {
initVisibility();
try {
// inflate , inflate
View inflated = mVSNetworkError.inflate();
} catch (Exception e) {
// inflate , , setVisibility
mVSNetworkError.setVisibility(View.VISIBLE);
}
}
public void setVSEmptyData() {
initVisibility();
try {
// inflate , inflate
mVSEmptyData.inflate();
} catch (Exception e) {
// inflate , , setVisibility
mVSEmptyData.setVisibility(View.VISIBLE);
}
}
public void setVSNormalData() {
initVisibility();
try {
// inflate , inflate
mVSNormalData.inflate();
} catch (Exception e) {
// inflate , , setVisibility
mVSNormalData.setVisibility(View.VISIBLE);
}
}
public void initVisibility() {
mVSLoading.setVisibility(View.GONE);
mVSFailedToLoad.setVisibility(View.GONE);
mVSEmptyData.setVisibility(View.GONE);
mVSNetworkError.setVisibility(View.GONE);
mVSNormalData.setVisibility(View.GONE);
}
protected abstract void setOnClickRefresh();
}
ソースコードのダウンロード自分のニーズに合わせて拡張できます.