質問

私の抽象クラスは延長されました Activity クラスは3つで構成されています Views次のXMLスニペットで説明されているように:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" 
    android:background="@drawable/bg">

    <LinearLayout 
        android:id="@+id/top_border">
        ...
    </LinearLayout>

    <View 
        android:id="@+id/activity_content"
        ...
        />

    <LinearLayout 
        android:id="@+id/bottom_border">
        ...          
    </LinearLayout>
</LinearLayout>

とで onCreate() 方法このXML-Layoutをコンテンツビューとして設定します。

私は欲しい Activityこれをオーバーライドするためにこれを拡張します onCreate() そして、Activity_Contentを定義します View 残りの境界は不変です。

たとえば、このように:

abstract public class MyActivity extends Activity {
   protected View mContent;

   @Override
   protected onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.common_layout);
      initializeContent();
   }

   abstract void initializeContent();  
}

class OneActivity extends MyActivity {

   @Override
   protected void initializeContent() {
      mContent = View.inflate(this, R.layout.some_view, null); // i.e. concrete View (e.g. LinearLayout, FrameLayout, GridView, etc.)
   }
}

しかし、私がそうするとき、私のマカントは私がそれを定義したときと同じままです MyActivity's onCreate().

Viewのタイプ/コンテンツを変更するにはどうすればよいですか Activity フォアグラウンドはありますか?

役に立ちましたか?

解決

まず、メインレイアウトのビューをビューグループに変更します(たとえば、 LinearLayout)。そうすれば、できます ビューを追加します. 。ユニークなビューを追加すると、達成したい効果がまったくあります。

class OneActivity extends MyActivity {
   @Override
   protected void initializeContent() {
      final ViewGroup viewGroup = (ViewGroup) findViewById(R.id.activity_content);
      viewGroup.addView(View.inflate(this, R.layout.some_view, null)); 
   }
}

あなたの場合、それは機能するはずです。カスタムビューグループに階層内のHigher Upからの他のビューが含まれている場合、カスタムビューを追加する前にクリーニングできます。

viewGroup.removeAllViews();

それはうまくいきます、私は私のプロジェクトのほとんどでまさにそれをします。

別の方法は、を見ることです フラグメントAPI, 、SDKの最新バージョンで利用できます。

他のヒント

Javaのクラスデータメンバーをオーバーライドすることはできません。代わりにメソッドを使用してください

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top