2014-06-17 41 views
0

我剛開始使用android編程,在嘗試設置TextView中的文本時遇到了此錯誤。我研究了其他人的問題,但我好像關注了他們答案中指出的麻煩問題。在TextView中設置文本引發空指針異常

這是我的XML代碼:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.everythingmath.MainActivity$PlaceholderFragment" > 

<GridLayout 
    android:id="@+id/problemLayout" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" 
    android:columnCount="5" 
    android:rowCount="1" > 

    <TextView 
     android:id="@+id/firstNumber" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="First Number" 
     android:textSize="20sp" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text=" + " 
     android:textSize="30sp" /> 

    <TextView 
     android:id="@+id/secondNumber" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Second Number" 
     android:textSize="20sp" /> 

    <EditText 
     android:id="@+id/numTextView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:inputType="number" 
     android:hint="Text Goes Here" 
     android:textSize="20sp"/> 

</GridLayout> 
</RelativeLayout> 

這裏是我的中肯的Java:

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

    int firstNumber = createRandomNumber(10); 
    int secondNumber = createRandomNumber(10); 
    TextView firstNumText = (TextView)findViewById(R.id.firstNumber); 
    TextView secondNumText = (TextView)findViewById(R.id.secondNumber); 
    firstNumText.setText(Integer.toString(firstNumber)); 
    secondNumText.setText(Integer.toString(secondNumber)); 
} 

這是我嘗試設置拋出錯誤的文本行。隨機數發生器也正常工作。

+0

yiur activity_main.xml沒有textview它屬於片段。在片段的onCreateView中初始化它 – Raghunandan

+0

以上佈局的名稱是什麼? – Dev

+0

@DevCarlsberg我猜佈局是自動創建的Fragment(fragment_main),因爲'tools:context =「com.example.everythingmath.MainActivity $ PlaceholderFragment」' –

回答

0

本地化PlaceholderFragment類裏面MainActivity類。

變化public View onCreateView方法爲

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_main, container, false); 

    int firstNumber = createRandomNumber(10); 
    int secondNumber = createRandomNumber(10); 
    TextView firstNumText = (TextView)findViewById(R.id.firstNumber); 
    TextView secondNumText = (TextView)findViewById(R.id.secondNumber); 
    firstNumText.setText(Integer.toString(firstNumber)); 
    secondNumText.setText(Integer.toString(secondNumber)); 

    return rootView; 
} 

你可能會需要移動createRandomNumber方法PlaceholderFragment類。而如果你已經從fragment_main改變片段的名稱別的東西,改變它也是在這一行

View rootView = inflater.inflate(R.layout.fragment_main, container, false); 

您當前的代碼不工作,因爲裏面

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

只能通過ID視圖中找到(findViewById)在activity_main佈局內宣佈。並且您的TextView視圖可能在fragment_main佈局中聲明。