2017-11-27 8 views
1

はそれがBaseActivityクラスを持っているし、それが他のすべての活動のためのスーパークラスとして機能します良いです。私は、活動のためのいくつかの共通の実装をするためにこれが必要です。基本アクティビティクラスを持つことは良いですか?

BaseActivity:この場合

public class BaseActivity extends Activity 
{ 
    //All Common implementations goes here 
} 

活動

public class HomeActivity extends BaseActivity 
{ 
} 
+2

コーディングハッピー。 –

答えて

1

は、私は基本抽象的活性を有する、および2つの具象継承されたサブクラスをお勧めします。基本アクティビティー内のすべての共通ビヘイビアを定義し、その差異の抽象メソッドを用意して、実際の実装でオーバーライドします。

例えば、異なるレイアウトリソースを持つ2つの活動のために:

public abstract class BaseActivity extends Activity { 
@Override public void onCreate(bundle) { 
super.onCreate(bundle); 
    setContentView(getLayoutResourceId()); } 
protected abstract int getLayoutResourceId(); 
} 



public class Activity1 extends BaseActivity { 
@Override public void onCreate(bundle) { 
    super.onCreate(bundle); // do extra stuff on your resources, using findViewById on your layout_for_activity1 } 
@Override protected int getLayoutResourceId() 
    { 
return R.layout.layout_for_activity1; 
    } 
} 

あなたは、あなたのサブクラスに固有たいすべてのビットのためのより多くの抽象メソッドを持つことができます。多くの問題につながるとデバッグには通常困難であることができます。それをやって

は、私の意見では、具体的なスーパークラスに具体的なサブクラスを持つよりもずっと良いです。

ハッピーコーディング。もっと助けが必要なことを私に教えてください!

0

それはすべてあなたの条件に依存するが、スケーラビリティのために常にすべての共有機能を置くために、基本クラスを持っていると重宝されています。クラス名やスクリーン名の取得など、共有ビヘイビアの実装を定義する必要がある場合にのみ、抽象クラスを使用することを大いに提案します。

0

私はすべての一般的な方法をカバーするために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(); 

} 

私のすべてのアクティビティで。

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"); 

    } 
} 

はい、それは共通の構造です:)

関連する問題