2017-01-10 14 views
0

レイアウトXMLファイルがありますユーザーがボタンをクリックしたときにTableLayoutに追加しようとしています。ここに私のonClickリスナメソッドは次のとおりです。ボタンクリック時にTableLayoutにTableRow xmlレイアウトを追加

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

私はまた私のonClickListenerがあるメソッドにonCreateViewメソッドからLayoutInflaterを渡して試してみましたそれを設定して使用しますが、スタックトレースが問題であるとは思われません。

java.lang.NullPointerException:仮想メソッド 'voidを呼び出しようとしましたヌル オブジェクト参照の android.widget.TableLayout.addView(android.view.View「)

どのように私はきちんとテーブルのonClickに私のXMLレイアウトファイルを追加するには?

<?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アクティビティのレイアウトではなく、ボタンの表示である可能性がありますので。

OR

TableLayoutButtonの親ビューであるならば、我々はまた、それにアクセスすることができます

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

関連する問題