2012-06-14 30 views
27

Tôi có một lớp View1 kéo dài View. Tôi muốn tăng thêm R.layout.test2.xml trong lớp học này View1. Tôi đã đặt một đoạn mã sau vào lớpLàm tăng bố cục xml trong lớp Chế độ xem tùy chỉnh

public class View1 extends View { 

    View view; 
    String[] countries = new String[] {"India", "USA", "Canada"}; 

    public View1(Context context) { 
     super(context); 
     LayoutInflater mInflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view=mInflater.inflate(R.layout.test2, null, false); 
    } 
} 

này Từ một lớp Home Tôi muốn xem thổi phồng này để có mặt ở đó cho một số trường hợp, Trong lớp Home tôi đã viết đoạn mã sau:

public class Home extends Activity{ 

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

    public void CreateView() { 
     LinearLayout lv=(LinearLayout)findViewById(R.id.linearlayout); 
     View1 view = new View1(Home.this); 
     lv.addView(view); 
    } 
} 

Nhưng khi tôi chạy dự án của tôi hoạt động không cho tôi thấy bất cứ điều gì.

Trả lời

45

Bạn không thể thêm chế độ xem vào lớp View thay vì bạn nên sử dụng ViewGroup hoặc một trong các lớp con của nó (như Linearlayout, RelativeLayout v.v.). Sau đó, mã của bạn sẽ như thế này:

public class View1 extends LinearLayout { 

    View view; 
    String[] countries = new String[] {"India", "USA", "Canada"}; 

    public View1(Context context) { 
     super(context); 
     LayoutInflater mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     mInflater.inflate(R.layout.test2, this, true);}} 

Cũng dòng:

mInflater.inflate(R.layout.test2, null, false) 

không thêm bất cứ điều gì để giao diện hiện tại (vì các tham số false), nó chỉ thổi phồng một View từ bố cục xml.

+1

Thnks nó hoạt động !! :) – LuminiousAndroid

+0

Bạn có thể cho biết lý do tại sao chúng tôi không đưa ra gì bằng cách mở rộng Chế độ xem. – LuminiousAndroid

+1

@ Kabir121 Lớp 'View' không hỗ trợ thêm các khung nhìn khác, lớp' View' đại diện cho một cá nhân 'View' (giống như, nếu bạn muốn xây dựng một nút' tròn ') và không phải là một nhóm (như trong trường hợp của bạn khi bạn thổi phồng tệp bố cục đó). – Luksprog

9

Sử dụng này

LayoutInflater li = (LayoutInflater)getContext().getSystemService(infService); 
    li.inflate(R.layout.test2, **this**, true); 

Bạn phải sử dụng this, không null, và thay đổi false tham số (boolean AttachToRoot) để true

+7

Để làm điều này, bạn cần phải phân lớp từ ViewGroup, không Xem – spookypeanut

3

Sử dụng mã dưới đây để thổi phồng bố trí của bạn, sau đó bạn có thể sử dụng chế độ xem đó cho bất kỳ mục đích nào. Điều này sẽ cung cấp cho bạn bố cục cha mẹ nhất của tệp XML của bạn. Gõ cast và sử dụng nó cho phù hợp.

View headerView = View.inflate(this, R.layout.layout_name, null); 
+0

nếu tôi ahve một danh sách xem trong lớp View1 của tôi sau đó onlistitem nhấp vào tôi đang cố gắng để thổi phồng xem mới nhưng nó không phải là inflatting xem mới .. Hãy giúp đỡ ai đó – LuminiousAndroid

+0

là mục danh sách của bạn, nhấp vào trong bộ điều hợp tùy chỉnh hoặc trong hoạt động. –

1

Bạn đang thêm chế độ xem trống hoạt động tại nhà. Vì trong lớp View1 bạn chỉ có chế độ xem thổi phồng nhưng không thêm bất cứ đâu.

0

Bạn phải sử dụng một ViewGroup như FrameLayout và làm:

public class View1 extends FrameLayout { 

    public View1(Context context) { 
     super(context); 
     inflate(context, R.layout.view1, this); 
    } 
} 

Trong XML bố trí, sử dụng thẻ <merge để không chỉ cần thêm view1 bố trí của bạn để bố trí gốc có nghĩa là chúng ta có một sản phẩm nào FrameLayout và chế độ xem được xác định của bạn bên cạnh nhau.

<?xml version="1.0" encoding="utf-8"?> 
<merge xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="content" /> 

</merge> 

Xem http://trickyandroid.com/protip-inflating-layout-for-your-custom-view/

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