5

Có ai có thể đề xuất một cách để cải thiện ví dụ API8 này không? Trong khi họ nói các quan điểm có thể đã được định nghĩa trong XML, thì những gì họ có trong thực tế được thực hiện là mã hóa chúng trong java. Tôi hiểu tại sao họ lại muốn. Họ đã thêm một số thành viên vào một LinearLayout mở rộng và các giá trị được xác định khi chạy.Làm thế nào để Phấn rộng LinearLayout mở rộng từ XML

Theo oh, tất cả mọi người trong vũ trụ, chỉ thị bố cục sẽ chuyển sang XML. Nhưng đối với ứng dụng này, nó có ý nghĩa để tiếp tục thiết lập văn bản như trong logic thời gian chạy. Vì vậy, chúng tôi đã có một cách tiếp cận lai. Thổi phồng các chế độ xem, sau đó điền văn bản động. Tôi đang gặp khó khăn trong việc tìm ra cách để thực hiện nó. Đây là nguồn và những gì tôi đã thử.

từ API8 Examples, List4.java

private class SpeechView extends LinearLayout { 
    public SpeechView(Context context, String title, String words) { 
     super(context); 

     this.setOrientation(VERTICAL); 

     // Here we build the child views in code. They could also have 
     // been specified in an XML file. 

     mTitle = new TextView(context); 
     mTitle.setText(title); 
     ... 

I figured kể từ khi LinearLayout có android: id = "@ + id/LinearLayout01", tôi sẽ có thể làm điều này trong OnCreate

SpeechView sv = (SpeechView) findViewById(R.id.LinearLayout01); 

nhưng nó không bao giờ chạm vào hàm tạo tối thiểu mà tôi đã thêm:

public class SpeechView extends LinearLayout { 
     public SpeechView(Context context) { 
      super(context); 
      System.out.println("Instantiated SpeechView(Context context)"); 
     } 
     ... 

Trả lời

3

Dường như bạn đã thổi phồng Bố cục của bạn, nằm trong tệp main_row.xml. Chính xác? Nhu cầu của tôi là khác nhau. Tôi muốn thổi phồng một con TextView của Layout mà tôi có trong tệp main.xml.

Tuy nhiên, tôi đã sử dụng một giải pháp tương tự. Kể từ khi tôi đã thổi phồng LinearLayout từ XML trong onCreate

setContentView(R.layout.main); 

những gì còn lại là để thổi phồng các TextView từ XML trong Xem constructor của tôi. Đây là cách tôi đã làm nó.

LayoutInflater li = LayoutInflater.from(context); 
LinearLayout ll = (LinearLayout) li.inflate(R.layout.main, this); 
TextView mTitle = (TextView) ll.findViewById(R.id.roleHeading); 

R.id.roleHeading là id của TextView tôi đang tăng cao.

<TextView android:id="@+id/roleHeading" ... /> 

Để tăng hiệu quả, tôi có thể di chuyển LayoutInflater sang thành viên Hoạt động để nó được tạo ngay một lần.

10

Tôi vừa chạy vào đây chính xác vấn đề bản thân mình. Những gì tôi nghĩ rằng bạn (chúng tôi) cần là điều này, nhưng tôi vẫn đang làm việc thông qua một số lỗi vì vậy tôi không thể nói chắc chắn:

public class SpeechView extends LinearLayout { 
     public SpeechView(Context context) { 
      super(context); 
      View.inflate(context, R.layout.main_row, this); 
     } 
     ... 

Tôi sẽ rất lo lắng nếu bạn có bất kỳ may mắn với nó.

Chỉnh sửa: Hiện tại, tôi đang làm việc cho tôi như thế này.

+0

Nó cũng làm việc cho tôi. Cảm ơn bạn! – Lion

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