2013-06-12 38 views
6

Tôi có chế độ xem phức tạp, chứa một số bản xem phụ, như lượt xem văn bản và chế độ xem hình ảnh. Tôi muốn thay thế một trong các khung nhìn hình ảnh bằng một chế độ xem hình ảnh (có nguồn gốc) khác (chế độ xem khác hỗ trợ tải hình ảnh trong nền).Làm cách nào để thay thế chế độ xem theo lập trình trong Android?

Làm cách nào để thay thế chế độ xem hình ảnh gốc bằng chế độ xem hình ảnh mới?

Giải pháp Tôi hiện đang có chỉ là sao chép dán bố trí XML toàn và thực hiện các thay thế trong XML mới - Rất xấu để lặp lại và không tái sử dụng những thứ :(

+0

dán một số mã –

+1

Lý do của tôi cho bản sao: Google không tìm thấy nó, mặc dù tôi +1 nó. Hmmm ... –

Trả lời

24

Tôi không thực sự chắc chắn rằng tôi hiểu những gì bạn đang nói nhưng nếu bạn chỉ đơn giản là muốn loại bỏ một thể hiện của Xem từ một bố trí và trao đổi nó với một bạn có thể sử dụng một lớp tiện ích như thế này:

import android.view.View; 
import android.view.ViewGroup; 

public class ViewGroupUtils { 

    public static ViewGroup getParent(View view) { 
     return (ViewGroup)view.getParent(); 
    } 

    public static void removeView(View view) { 
     ViewGroup parent = getParent(view); 
     if(parent != null) { 
      parent.removeView(view); 
     } 
    } 

    public static void replaceView(View currentView, View newView) { 
     ViewGroup parent = getParent(currentView); 
     if(parent == null) { 
      return; 
     } 
     final int index = parent.indexOfChild(currentView); 
     removeView(currentView); 
     removeView(newView); 
     parent.addView(newView, index); 
    } 
} 

theo dõi câu hỏi: Ý anh là gì khi bạn đang nói "Rất xấu để sao chép và không tái sử dụng"? Bạn có biết về số include tag?

+0

Cập nhật phần tiếp theo, 'include' là tốt khi bạn muốn thêm bố cục hiện có vào một bố cục khác. Ở đây, tôi muốn thay thế một khung nhìn trong khung nhìn khác - lập trình - không biên dịch thời gian. –

+1

Bổ sung nhỏ: trước khi thêm 'newView' vào parent trong' replaceView', có thể hữu ích khi sao chép id currentViews: 'newView.setId (currentView.getId());' để 'findViewById' trả về' newView' –

Các vấn đề liên quan