2016-08-10 7 views
2

私はアンドロイドには新しく、私はインタラクティブに使える再利用可能なUI作品を作る方法を理解しようとしています。私はそこにいくつかのテクニックがあることを知っていますが、私は誰かが他より優れているか、あるいはそれらがすべて交換可能に使用できるかを理解していません。誰かが違いを指摘できれば(または私が誤解した場合)、それは認められるでしょう。フラグメントと基本クラスの拡張の違いは何ですか?

  1. 新しいページを処理するフラグメントまたはfragmentActivityを作成します。このフラグメントは適用可能な場合はいつでも使用できますが、フラグメントのライフサイクルを管理するために特別な注意が必要です。
  2. レイアウトを持つ基本クラスを拡張し、必要なものをすべて拡張します。他のクラスであれば、この基底を拡張して、基底のUIも表示して動作させることができます。
  3. を使用すると、UIの部分のみを再利用できます。これについては、そのレイアウトのロジックがどこにあるのかわかりません。

私が求めているのは、これらのそれぞれが使い果たされていて、どちらかを使用することができれば、私はどんな悪影響を及ぼすことなくより快適だと思います。

Ps:私はすべてのページに置くことができる再利用可能なナビゲーションバーを作成する、または異なるページにすべてヘルプボタンがあるような場合にこれらを使用します。

答えて

1

それぞれの方法は、再利用可能なユーザーインターフェイスを作成するために不可欠であり、それぞれ異なる用途があります。

まず、layoutsは、ユーザーインターフェイスの視覚的構造を定義するだけで、activitiesfragmentsは、その視覚的構造がどのように動作するかを定義するコンポーネントです。これは、視覚的構造とユーザインタフェースの動作とを明確に分離する。

したがって、定義済みのビジュアル構造を再利用するために<include/>タグが使用されます。このビジュアル構造は任意のレイアウトに含めることができますが、各アクティビティーまたはフラグメントは、ビジュアル構造が個別に動作する方法を定義できます。

再利用可能な動作を作成するには、Activityをサブクラス化できます。例えば; FragmentActivityActivityクラスで定義された動作を保持しますが、1つまたは複数のフラグメントを格納する機能を追加します。 FragmentActivityをサブクラス化するクラスでは、これらの動作もそれぞれ保持されます。

フラグメントは、Activityの再利用可能セグメントとして開発され、独自の視覚的構造と動作を定義することができます。したがって、Activityのセクションのビジュアルな構造と動作の両方を再利用できるようにするには、Fragmentを作成してください。フラグメントはサブクラス化することもできます。これを使用して、拡張クラスのビジュアル構造、ビヘイビア、またはその両方を変更できます。

これらは、再利用可能なインターフェイスを作成する唯一の方法ではありません。再利用可能なリソース、ビュー、スタイルまたはアニメーションを定義して、モジュラーユーザーインターフェイスを作成できます。ニーズに合わせてこれらのさまざまなコンポーネントを活用する方法を学ぶことは、Android開発(および一般的な開発)の大きな部分です。


最後に、私はあなたのポストスクリプトに対処します。ヘルプボタンを含む各ページの再利用可能なナビゲーションバーを作成する方法。うまくいけば、これは再利用可能なインターフェイスを作成する簡単な方法を示し、それはそのような困難な仕事ではないことを示します。

Activityのための再利用可能な ヘルプボタンを実装する1つの方法は、基本クラスにオプションメニューとして使用することができます menuリソースを作成することです

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <item android:id="@+id/action_help" android:title="@string/action_help" 
     android:icon="@drawable/ic_help_white_24dp" android:orderInCategory="100" 
     app:showAsAction="ifRoom"/> 

</menu> 

はその後、このメニューリソースが内で膨張さを基本クラス基底クラスはSupport Libraryの使用にするために(FragmentActivityを拡張する)AppCompatActivityを拡張:あなたは、基本クラスでヘルプボタンのクリックを処理するかこれで

public abstract class BaseActivity extends AppCompatActivity { 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.base, menu); 
     return super.onCreateOptionsMenu(menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch(item.getItemId()) { 
      case R.id.action_help: 
       dispatchHelpIntent(); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 

    protected void dispatchHelpIntent() { 
     // Handle help options button 
    } 

} 

を、または子クラスのオーバーライドを持ってdispatchHelpIntent()それを別々に扱います。子クラスのonCreateOptionsMenu()onOptionsItemSelected()をオーバーライドして、メニューに項目を追加することもできます。 ヘルプボタンを保持するために、私がここで行うように、両方の方法でsuperに電話してください。

<android.support.design.widget.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/app_bar" 
    android:layout_width="match_parent" android:layout_height="wrap_content" 
    android:theme="@style/AppTheme.AppBarOverlay"> 

    <android.support.v7.widget.Toolbar android:id="@+id/toolbar" 
     android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay"/> 

</android.support.design.widget.AppBarLayout> 

次に、再利用可能なナビゲーションバー(通常はアンドロイドでApp Barと呼ばれる)を作成するために、あなたがしなければならないすべては、各Activityためlayoutファイルに含まれるlayoutファイルを作成していますそして、あなたは<include/>タグ使用することにより、他のActivityでこのレイアウトを含めることができます。

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" android:layout_height="match_parent"/> 

    <include layout="@layout/app_bar_base"/> 

    <!-- Activity content goes here --> 

</android.support.design.widget.CoordinatorLayout> 

をそして最後にとしてこれを追加しますBaseActivityを拡張するすべてのActivityに(「アクションバー」のAppバーの古い用語である):

public class MainActivity extends BaseActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     setupActionBar(); 
    } 

    private void setupActionBar() { 
     ActionBar actionBar = getSupportActionBar(); 
     if(actionBar != null) { 
      actionBar.setDisplayShowTitleEnabled(true); 
     } 
    } 

} 

すべてのActivityはそれぞれ、同じレイアウトを使用しない限り、ので、これはBaseActivityで行うことができない理由がありますActivityは、setContentView()で独自のレイアウトを定義する必要があります。 Toolbarは、コンテンツビューが設定されるまで利用できないため、この方法では各アクティビティでアクションバー(アプリケーションバー)を個別に設定する必要があります。

+0

非常に徹底した、ありがとう! – CookieMonster

関連する問題