BaseActivity上课好吗?它将成为所有其他活动的超类。我需要有一些通用的活动实现。
BaseActivity:
public class BaseActivity extends Activity
{
//All Common implementations goes here
}
Run Code Online (Sandbox Code Playgroud)
活动项目
public class HomeActivity extends BaseActivity
{
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我建议您有一个基本的抽象活动和两个具体的继承子类。您定义基本活动中的所有常见行为,并具有区别的抽象方法,然后在实际实现中将其覆盖。
例如,对于具有不同布局资源的两个活动:
public abstract class BaseActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutResourceId());
}
protected abstract int getLayoutResourceId();
}
public class Activity1 extends BaseActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // do extra stuff on your resources, using findViewById on your layout_for_activity1
}
@Override
protected int getLayoutResourceId(){
return R.layout.layout_for_activity1;
}
}
Run Code Online (Sandbox Code Playgroud)
对于想要特定于子类的每一点,您可以拥有更多抽象方法。
在我看来,这样做要比将具体的子类具体化为具体的超类好得多:这可能会导致许多问题,并且通常很难调试。
快乐的编码。让我知道需要更多帮助!!
我已经将这种类型的BaseActivity用于所有常用方法。
public abstract class AbstractBaseActivity extends AppCompatActivity{
private ProgressDialog mProgressDialog;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getContentView());
ButterKnife.bind(this);
onViewReady(savedInstanceState, getIntent());
}
@CallSuper
protected void onViewReady(Bundle savedInstanceState, Intent intent) {
//To be used by child activities
}
@Override
protected void onDestroy() {
ButterKnife.bind(this);
super.onDestroy();
}
protected void hideKeyboard() {
try {
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
if (getCurrentFocus() != null)
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
} catch (Exception e) {
Log.e("MultiBackStack", "Failed to add fragment to back stack", e);
}
}
public void noInternetConnectionAvailable() {
showToast(getString(R.string.noNetworkFound));
}
protected void showBackArrow() {
ActionBar supportActionBar = getSupportActionBar();
if (supportActionBar != null) {
supportActionBar.setDisplayHomeAsUpEnabled(true);
supportActionBar.setDisplayShowHomeEnabled(true);
}
}
public void showProgressDialog(String title, @NonNull String message) {
if (mProgressDialog == null) {
mProgressDialog = new ProgressDialog(this);
if (title != null)
mProgressDialog.setTitle(title);
mProgressDialog.setIcon(R.mipmap.ic_launcher);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mProgressDialog.setCancelable(false);
}
if (!mProgressDialog.isShowing()) {
mProgressDialog.setMessage(message);
mProgressDialog.show();
}
}
public void hideDialog() {
if (mProgressDialog != null && mProgressDialog.isShowing()) {
mProgressDialog.dismiss();
}
}
protected void showAlertDialog(String msg) {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
dialogBuilder.setTitle(null);
dialogBuilder.setIcon(R.mipmap.ic_launcher);
dialogBuilder.setMessage(msg);
dialogBuilder.setPositiveButton(getString(R.string.dialog_ok_btn), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
dialogBuilder.setCancelable(false);
dialogBuilder.show();
}
protected void showToast(String mToastMsg) {
Toast.makeText(this, mToastMsg, Toast.LENGTH_LONG).show();
}
protected abstract int getContentView();
}
Run Code Online (Sandbox Code Playgroud)
在我的每项活动中。
public class MainActivity extends AbstractBaseActivity
{
@Override
protected int getContentView() {
return R.layout.main_activity;//your layout
}
@Override
protected void onViewReady(Bundle savedInstanceState, Intent intent) {
super.onViewReady(savedInstanceState, intent);
//your code
//get baseclass methods like this
//showToast("hello");
}
}
Run Code Online (Sandbox Code Playgroud)
快乐的编码:)
| 归档时间: |
|
| 查看次数: |
5879 次 |
| 最近记录: |