2017-01-10 3 views
0

У меня есть XML-файл макета, который я пытаюсь добавить в TableLayout, когда пользователь нажимает кнопку. Вот мой метод OnClick слушатель:Добавить TableRow xml layout в TableLayout при нажатии кнопки

addHazardButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     TableLayout table = (TableLayout) view.findViewById(R.id.safety_question_table); 
     View row = getLayoutInflater(null).inflate(R.layout.fragment_safety_question_table_row, table); 
     table.addView(row); 
    } 
}); 

Я также попытался заменить строку View row = getLayoutInflater.... следующие:

View row = getLayoutInflater(null).inflate(R.layout.fragment_safety_question_table_row, null);, 
& 
TableRow row = getLayoutInflater(null).inflate(R.layout.fragment_safety_question_table_row, table);, 
& 
TableRow row = getLayoutInflater(null).inflate(R.layout.fragment_safety_question_table_row, null); 

Я также попытался прохождения LayoutInflater от метода onCreateView к методу моего onClickListener является установить и использовать его, но я не думаю, что это проблема, поскольку трассировка стека равна

java.lang.NullPointerException: попытка вызвать виртуальный метод 'void android.widget.TableLayout.addView (android.view.View)»на нуль ссылки на объект

Как правильно добавить свой файл макета XML в таблицу OnClick?

<?xml version="1.0" encoding="utf-8"?> 
<TableRow xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content"> 

<EditText 
    android:id="@+id/task_step_text" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_margin="5dp" 
    android:layout_weight="1" 
    android:background="@drawable/border_outline" 
    android:inputType="text" 
    android:maxLines="1" /> 

<EditText 
    android:id="@+id/hazards_not_covered_text" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_margin="5dp" 
    android:layout_weight="1" 
    android:background="@drawable/border_outline" 
    android:inputType="text" 
    android:maxLines="1" /> 

<EditText 
    android:id="@+id/reduce_risk_text" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_margin="5dp" 
    android:layout_weight="1" 
    android:background="@drawable/border_outline" 
    android:inputType="text" 
    android:maxLines="1" /> 
</TableRow> 

ответ

1

Использование

TableLayout table = (TableLayout) findViewById(R.id.safety_question_table); 

вместо

TableLayout table = (TableLayout) view.findViewById(R.id.safety_question_table); 

Поскольку TableLayout, вероятно, в макете активность, а не в кнопки View.

ИЛИ

если TableLayout находится в родительском Вид Button тогда мы можем получить доступ к нему, как:

View parent = (View)view.getParent(); 
    if (parent != null) { 
     TableLayout table = 
      (TableLayout)parent.findViewById(R.id.safety_question_table); 
     // add your code here 
    } 
+0

TableLayout был в родительском зрения, и это работает для меня. большое спасибо – wizloc

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