Intereting Posts
Android API Google Plus – PeopleApi.loadConnected возвращает 0 человек Почему onResume () вызывается в скрытых фрагментах? Утечка памяти FragmentStatePagerAdapter (вложенные фрагменты с помощью viewpager) Предоставляет ли ведущий знания о Activity / Context плохую идею в шаблоне MVP? Android Studio – IBus до 1.5.11 может привести к проблемам ввода. Подробнее см. IDEA-78860 Почему поддержка веб-рабочих HTML5 была удалена из браузера Android в версиях 2.2 и выше? Smack "Должна быть установлена ​​ошибка локального (пользовательского) JID" Android Adding Tab внутри фрагмента Android Geocoder getFromLocationName всегда возвращает null Как передать параметр веб-сервису с помощью ksoap2? Навигационный ящик onNavigationDrawerItemSelected вызывается перед MainActivity onCreate? OnCreate не вызвал активность Как отобразить AlertDialog в фрагменте? Пользовательский ListView не выделяет ListViewItem при нажатии Сменные сетевые и GPS-провайдеры в соответствии с gps-статусом android

Как раздуть один вид с помощью макета

У меня есть макет, определенный в 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(...) 

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

Solutions Collecting From Web of "Как раздуть один вид с помощью макета"

Я не уверен, что я выполнил ваш вопрос: пытаетесь ли вы привязать детское представление к RelativeLayout? Если это так, вы хотите сделать что-то вроде:

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

Вы раздуваете XML-ресурс. См. Документ LayoutInflater .

Если ваш макет находится в файле mylayout.xml , вы бы сделали что-то вроде:

 View view; LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = inflater.inflate(R.layout.mylayout, null); RelativeLayout item = (RelativeLayout) view.findViewById(R.id.item); 

Хотя поздний ответ, но хотел бы добавить, что один из способов получить это

 LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = layoutInflater.inflate(R.layout.mylayout, item ); 

Где item – родительский макет, где вы хотите добавить дочерний макет.

Полезно добавить к этому, хотя это старый пост, что если дочернее представление, которое накачивается из xml, должно быть добавлено в макет представления, вам нужно вызвать надувание с подсказкой того, какой тип группы просмотра он собирается Для добавления в. Подобно:

 View child = getLayoutInflater().inflate(R.layout.child, item, false); 

Метод надувания довольно перегружен и описывает эту часть использования в документах. У меня была проблема, когда одно представление, надутое из xml, не соответствовало правильному отношению родителя, пока я не сделал такой тип изменений.

Еще проще использовать

 View child = View.inflate(context, R.layout.child, null) item.addChild(child) //attach to your item 

Если вы не работаете, вы можете использовать метод static from() из класса LayoutInflater для получения LayoutInflater или запросить службу из контекстного метода getSystemService() :

 LayoutInflater i; Context x; //Assuming here that x is a valid context, not null i = (LayoutInflater) x.getSystemService(Context.LAYOUT_INFLATER_SERVICE); //OR i = LayoutInflater.from(x); 

(Я знаю, что это почти 4 года назад, но все же стоит упомянуть)

Макет инфляции

 View view = null; LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = inflater.inflate(R.layout.mylayout, null); main.addView(view); 

Проверьте эту ссылку. У него есть ответ-> https://possiblemobile.com/2013/05/layout-inflation-as-intended/

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

Моя ситуация: я использую отдельный вид (XML), который содержит WebView , затем открывается в AlertDialog когда я нажимаю кнопку в своем основном представлении активности. Но так или иначе WebView принадлежал к виду основной активности (вероятно, потому, что я вытаскиваю ресурс здесь), поэтому прямо перед тем, как я назначил его в свой AlertDialog (как представление), мне пришлось получить родительский WebView моего 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(); 

Если вы хотите добавить один просмотр несколько раз, вам нужно использовать

  layoutInflaterForButton = getActivity().getLayoutInflater(); for (int noOfButton = 0; noOfButton < 5; noOfButton++) { FrameLayout btnView = (FrameLayout) layoutInflaterForButton.inflate(R.layout.poll_button, null); btnContainer.addView(btnView); } 

Если вам нравится

  layoutInflaterForButton = getActivity().getLayoutInflater(); FrameLayout btnView = (FrameLayout) layoutInflaterForButton.inflate(R.layout.poll_button, null); 

а также

 for (int noOfButton = 0; noOfButton < 5; noOfButton++) { btnContainer.addView(btnView); } 

То он будет исключать все готовые добавленные представления.

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

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