更改动态查看活动中的内容

teo*_*tik 6 android android-ui android-view

我从类扩展的抽象类Activity包含三个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>
Run Code Online (Sandbox Code Playgroud)

onCreate()方法中,我将此XML布局设置为内容视图.

我希望Activity扩展这个的s覆盖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.)
   }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做,我mContent保持原样,当我定义它一样MyActivityonCreate().

如何更改视图的类型/内容取决于Activity前景中的内容?

Gui*_*ume 7

首先将主布局中的视图更改为视图组(例如,a 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)); 
   }
}
Run Code Online (Sandbox Code Playgroud)

在你的情况下应该工作.如果您的自定义视图组包含层次结构中较高层的其他视图,则可以在添加自定义视图之前将其清除:

viewGroup.removeAllViews();
Run Code Online (Sandbox Code Playgroud)

它有效,我在大多数项目中都这样做.

另一种方法是查看可用于最新版本SDK 的Fragments API.