Как надуть один вид с макетом - PullRequest
207 голосов
/ 25 февраля 2010

У меня есть макет, определенный в XML. Содержит также:

<RelativeLayout
    android:id="@+id/item"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
/>

Я хотел бы накачать этот RelativeView другим файлом макета XML. Я могу использовать разные макеты в зависимости от ситуации. Как я должен это делать? Я пробовал разные варианты

RelativeLayout item = (RelativeLayout) findViewById(R.id.item);
item.inflate(...)

Но ни один из них не работал нормально.

Ответы [ 16 ]

2 голосов
/ 31 декабря 2018

Попробуйте этот код:

  1. Если вы просто хотите надуть свой макет:

View view = LayoutInflater.from(context).inflate(R.layout.your_xml_layout,null); // Code for inflating xml layout
RelativeLayout item = view.findViewById(R.id.item);   
  1. Если вы хотите накачать свой макет в контейнере (родительский макет):

LinearLayout parent = findViewById(R.id.container);        //parent layout.
View view = LayoutInflater.from(context).inflate(R.layout.your_xml_layout,parent,false); 
RelativeLayout item = view.findViewById(R.id.item);       //initialize layout & By this you can also perform any event.
parent.addView(view);             //adding your inflated layout in parent layout.
2 голосов
/ 28 июня 2018

Если вы пытаетесь прикрепить дочернее представление к RelativeLayout? Вы можете сделать, следуя

RelativeLayout item = (RelativeLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, item, true);
2 голосов
/ 21 апреля 2016

У меня было самое трудное время с этой ошибкой из-за моих уникальных обстоятельств, но в конце концов я нашел решение.

Моя ситуация: я использую отдельное представление (XML), которое содержит WebView, а затем открывается в AlertDialog, когда я нажимаю кнопку в моем основном представлении активности. Но так или иначе WebView принадлежал к основному виду деятельности (вероятно, потому что я извлекаю ресурс отсюда), поэтому прямо перед тем, как я назначил его для моего AlertDialog (как представление), мне нужно было получить родителя моего WebView, поместите его в ViewGroup, затем удалите все представления на этом ViewGroup. Это сработало, и моя ошибка ушла.

// set up Alert Dialog box
AlertDialog.Builder alert = new AlertDialog.Builder(this);
// inflate other xml where WebView is
LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService
                (Context.LAYOUT_INFLATER_SERVICE);
View v = layoutInflater.inflate(R.layout.your_webview_layout, null);
final WebView webView = (WebView) v.findViewById(R.id.your_webview_id);

// more code...

.... позже после того, как я загрузил WebView ....

// first, remove the parent of WebView from it's old parent so can be assigned a new one.
ViewGroup vg = (ViewGroup) webView.getParent();
vg.removeAllViews();

// put WebView in Dialog box
alert.setView(webView);
alert.show();
1 голос
/ 26 апреля 2018

С Kotlin вы можете использовать:

val content = LayoutInflater.from(context).inflate(R.layout.[custom_layout_name], null)

[your_main_layout].apply {
    //..
    addView(content)
}
0 голосов
/ 12 февраля 2019

Не нужно никаких сложностей, это просто, как

 setContentView(R.layout.your_layout);
0 голосов
/ 23 ноября 2016

Я использовал приведенный ниже фрагмент кода для этого, и он работал для меня.

LinearLayout linearLayout = (LinearLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, null);
linearLayout.addView(child);
...