2015-10-23 4 views
1

Мне нужна помощь с LayoutInflater. В моем проекте я получаю «Избегайте прохождения null как корень вида (необходим для разрешения параметров макета ...» ворса предупреждение Это предупреждение от деятельности, когда в OnCreate метод у меня есть что-то вроде этого:.LayoutInflater в действии

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

это для надувания заголовок, например.

Я знаю, что когда я использую LayoutInflater в фрагменте или адаптер у меня есть ViewGroup объект, и я могу передать его вместо нулевой, но то, что я должен делать в этой ситуации, когда она находится в деятельности? Должен ли я подавить это предупреждение и передать null или создать какой-либо родительский объект?

EDIT:

public void addTextField(String message, int textSize) { 
    LinearLayout field = (LinearLayout) getLayoutInflater().inflate(R.layout.text_view_field, null); 
    TextView textView = (TextView) field.findViewById(R.id.taroTextView); 
    textView.setText(message); 
    textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize); 
    textView.setSingleLine(false); 
    mFieldsLayout.addView(field, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 
} 

или:

public class MyActionBarActivity extends ActionBarActivity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    ActionBar actionBar = getSupportActionBar(); 
    if (actionBar != null) { 
     actionBar.setDisplayShowHomeEnabled(false); 
     actionBar.setDisplayShowTitleEnabled(false); 
     LayoutInflater inflater = LayoutInflater.from(this); 

     View customView = inflater.inflate(R.layout.action_bar_layout, null); 
     actionBar.setCustomView(customView); 
     actionBar.setDisplayShowCustomEnabled(true); 
    } 
} 

}

+0

Вы не можете использовать findViewById в своем коде вместо этого? Но сначала настройте свой макет, используя setContentView, прежде чем использовать findViewById, чтобы получить обработчики вашего кода. – Simon

ответ

3

Почему бы вам не позвонить непосредственно getLayoutInflater() в вашей деятельности?

следующим образом:

View view = getLayoutInflater().inflate(R.layout.my_view, null); 

Если параметр null не является проблемой. Он отлично работает в моей деятельности.

3

Вы должны передать родительский элемент, который будет содержать представление.

т.д .:

ViewGroup container = (ViewGroup) findViewById(R.id.header_container); 
View view = getLayoutInflater().inflate(R.layout.my_view, container, false); 
container.addView(view); 

Это необходимо только для того, мнение о том, что вы раздувания сохраняет это родительские-зависимые атрибуты, как на полях. Если вы пройдете null, они будут установлены в их значение по умолчанию.

1

Это просто предупреждение. Иногда вам необходимо передать null. Ничего плохого в этом нет, если это намеренно. Многие виджеты в инфраструктуре android тоже делают это.

Если вы хотите подавить предупреждения использовать это:

@SuppressLint("InflateParams") 

на вашем заявлении/метода или класса.

Для экс:

@SuppressLint("InflateParams") 
View view = inflater.inflate(R.layout.my_view, null); 

или

@SuppressLint("InflateParams") 
void yourMethod(){ 
LayoutInflater inflater =(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View view = inflater.inflate(R.layout.my_view, null); 
} 

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

+0

Не могли бы вы привести пример ситуации, когда я должен передать родительскому элементу вместо null в Activity? – Giks91

+0

Обычно для пользовательских макетов. Вы можете прочитать больше здесь: https://possiblemobile.com/2013/05/layout-inflation-as-intended/ Что вы делаете с видом, который вы раздуваете. – Abhilash

+0

Это только заголовок с названием деятельности. У меня есть проект, когда надувание используется для добавления заголовка или в диалоговом окне для добавления текста (всегда с нулевым значением только в фрагментах или адаптерах, передающих родительский элемент) - это хороший подход? – Giks91

Смежные вопросы