Наложение макета xml в пользовательский класс View

У меня есть класс View1 который расширяет View . Я хочу раздуть R.layout.test2.xml в этом классе View1 . Я поместил следующий код в этот класс

 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); } } 

Из другого класса Home Я хочу, чтобы этот завышенный вид был там для некоторых обстоятельств. В классе Home я написал следующий код:

 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); } } 

Но когда я запускаю свой проект, деятельность не показывает мне ничего.

Solutions Collecting From Web of "Наложение макета xml в пользовательский класс View"

Вы не можете добавлять представления к классу View вместо этого следует использовать ViewGroup или один из его подклассов (например, Linearlayout , RelativeLayout т. Д.). Тогда ваш код будет выглядеть так:

 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);}} 

Также строка:

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

Ничего не добавляет к текущему виду (из-за false параметра), он просто раздувает представление из макета xml.

Использовать это

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

Вы должны использовать this , а не null, и изменить параметр false (boolean AttachToRoot) на true

Используйте приведенный ниже код, чтобы раздуть макет, тогда вы можете использовать это представление для любых целей. Это даст вам самый родительский макет вашего xml-файла. Соответствует типу и использует.

Просмотреть headerView = View.inflate (это, R.layout.layout_name, null);

Вы добавляете пустое представление домашней активности. Потому что в классе View1 вы только раздуваете представление, но не добавляете нигде.

Вы должны использовать ViewGroup как FrameLayout и делать:

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

В XML-макете используйте тег <merge чтобы не просто добавить макет view1 к корневому макету, что означает, что у нас есть пустой FrameLayout и ваше определенное представление рядом друг с другом.

 <?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> 

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