2012-06-14 4 views
27

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

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

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

ответ

45

Вы не можете добавить взгляды на 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), он просто надувает View от xml.

+1

Thnks это работает !! :) – LuminiousAndroid

+0

Можете ли вы рассказать, почему мы ничего не давали, расширив View. – LuminiousAndroid

+1

@ Kabir121 Класс 'View' не поддерживает добавление к нему других представлений, класс' View' представляет собой отдельный индивидуальный 'View' (например, если вы хотите создать закругленную кнопку' Button'), а не группу (например, в вашем случае, когда вы надуваете этот файл макета). – Luksprog

9

Используйте этот

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

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

+7

Для этого вам нужно подклассом из ViewGroup, а не View – spookypeanut

3

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

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

, если я вижу список в моем классе View1, а затем onlistitem click Я пытаюсь раздуть новый вид, но он не раздувает новый вид. Помогите кому-нибудь – LuminiousAndroid

+0

Где это ваш элемент списка в пользовательском адаптере или в действии. –

1

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

0

Вы должны использовать 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/