0

프로그래밍 방식으로 TableRayout에 TableRow를 추가하려고하지만 NPE를 계속 제공합니다.프로그래밍 방식으로 TableLayout에 TableRow를 추가하려고 할 때 NullPointerException이 발생했습니다.

이 내에서 onCreate 방법 :

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    if (savedInstanceState == null) { 
     getSupportFragmentManager().beginTransaction() 
       .add(R.id.container, new PlaceholderFragment()).commit(); 
    } 

    try { 
     BufferedReader br = new BufferedReader(new InputStreamReader(openFileInput(MainActivity.FILE_SERVERS))); 
     TableLayout table = (TableLayout) findViewById(R.id.table_servers); 
     String line = null; 
     while ((line = br.readLine()) != null){ 
      String[] values = line.split(","); 
      MCServer server = new MCServer(values[0], values[1], values[2], values[3], Boolean.parseBoolean(values[4])); 
      servers.add(server); 
      TableRow row = new TableRow(this); 
      TextView name = new TextView(this); 
      TextView ip = new TextView(this); 
      TextView interval = new TextView(this); 
      TextView status = new TextView(this); 
      name.setText(values[0]); 
      ip.setText(values[1] + ":" + values[2]); 
      interval.setText(values[3]); 
      status.setText("----"); 
      row.addView(name); 
      row.addView(ip); 
      row.addView(interval); 
      row.addView(status); 
      table.addView(row); 
     } 
     br.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

이 내 fragment_main.xml :

table.addView(row); 

내가하지 않습니다 : 그것은 나에게이 라인에 NPE을 제공

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/table_servers" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<TableRow> 
    <TextView 
     android:layout_width="0dp" 
     android:layout_height="23dp" 
     android:layout_weight="1" 
     android:padding="3dip" 
     android:text="@string/servers_table_r1c1" /> 
    <TextView 
     android:layout_width="0dp" 
     android:layout_height="23dp" 
     android:layout_weight="1" 
     android:padding="3dip" 
     android:text="@string/servers_table_r1c2" /> 

    <TextView 
     android:layout_width="0dp" 
     android:layout_height="23dp" 
     android:layout_weight="0.6" 
     android:padding="3dip" 
     android:text="@string/servers_table_r1c3" /> 

    <TextView 
     android:layout_width="0dp" 
     android:layout_height="23dp" 
     android:layout_weight="0.6" 
     android:padding="3dip" 
     android:text="@string/servers_table_r1c4" /> 
</TableRow> 
<!-- This one is for testing purposes --> 
<TableRow> 
    <TextView 
     android:text="@string/servers_table_r1c1" 
     android:padding="3dip" /> 
    <TextView 
     android:text="@string/servers_table_r1c2" 
     android:padding="3dip" /> 
    <TextView 
     android:text="@string/servers_table_r1c3" 
     android:padding="3dip" /> 
    <TextView 
     android:text="@string/servers_table_r1c4" 
     android:padding="3dip" /> 
</TableRow> 

</TableLayout> 

문제가 무엇인지 알면 어떻게 해결할 수 있습니까?

답변

0

조각의 레이아웃에보기를 배치 했으므로 조각을 제자리에 놓을 때까지 활동의 일부가 아닙니다.

요약하면 try... 코드를 조각의 onCreateView()으로 이동하십시오. 그리고 findViewById 대신 rootView.findViewById()을 사용하십시오. rootView은 메서드에서 반환되는 뷰입니다.