拥有基础活动课程是否很好?

4 android android-activity

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)

Ank*_*dar 7

在这种情况下,我建议您有一个基本的抽象活动和两个具体的继承子类。您定义基本活动中的所有常见行为,并具有区别的抽象方法,然后在实际实现中将其覆盖。

例如,对于具有不同布局资源的两个活动:

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)

对于想要特定于子类的每一点,您可以拥有更多抽象方法。

在我看来,这样做要比将具体的子类具体化为具体的超类好得多:这可能会导致许多问题,并且通常很难调试。

快乐的编码。让我知道需要更多帮助!!


Mit*_*iya 6

我已经将这种类型的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)

快乐的编码:)