首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android Activity 中切換 View:正確替換內容視圖而非重複 setContentView

     編輯:程式設計綜合問答

錯誤做法

// 在 onClick 中再次調用 setContentView 會導致崩潰
public void onClick(View v) {
    setContentView(new MyView(this)); // 崩潰!Activity 不允許多次 setContentView
}

正確方案:ViewGroup 容器替換子 View

public class MainActivity extends AppCompatActivity {
    private ViewGroup container; // 根佈局容器
    private View paintLayout;    // 預加載的繪圖佈局

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); // 僅調用一次
        container = findViewById(R.id.root_container); // 根佈局 ID
        LayoutInflater inflater = LayoutInflater.from(this);
        paintLayout = inflater.inflate(R.layout.paint_layout, container, false);

        findViewById(R.id.btn_start).setOnClickListener(v -> switchToPaintView());
    }

    private void switchToPaintView() {
        container.removeAllViews();          // 清空現有內容
        container.addView(paintLayout);      // 添加繪圖 View
        // 若 MyView 是自定義 View,直接 new MyView(this) 添加即可
    }
}

關鍵點

  • `setContentView` **整個 Activity 生命周期只能調用一次**(通常在 `onCreate`)。
  • 動態切換界面應操作 **根 ViewGroup**(`FrameLayout`、`LinearLayout` 等)的子 View 集合。
  • 預先 `inflate` 好備選佈局,或直接實例化自定義 View,切換時 `removeAllViews()` + `addView()`。

替代架構:Fragment

複雜界面切換建議使用 `FragmentManager` 管理 Fragment,支持回棧、生命周期管理、動畫過渡,是 Android 官方推薦模式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved