2
對於Android應用程序,我試圖使用微調,當選擇一個選項時,將隱藏/顯示相關的視圖對象。對於我的應用程序,這些對象是該字段的EditText和關聯的TextView標籤。不幸的是,我似乎無法得到EditText來隱藏/顯示,當我添加代碼來隱藏/顯示TextView時,我得到一個NullPointerException。我認爲,因爲我在一個RelativeLayout中佈置視圖對象,通過隱藏其中一個視圖對象,我將刪除它與其他視圖對象的關係,因此是NullPointer。Android - 如何使用微調來隱藏/顯示查看對象
任何人都可以找出爲什麼會發生這種情況嗎?這裏是我的代碼:
public class FormFields extends Activity {
private Spinner mSpinner;
private EditText mTextField;
private TextView mLabel;
private static final int SPINNER_OPTION_FIRST = 0;
private static final int SPINNER_OPTION_SECOND = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.form_fields);
mTextField = (EditText) findViewById(R.id.text_field);
mLabel = (TextView) findViewById(R.id.field_label)
mSpinner = (Spinner) findViewById(R.id.spinner);
ArrayAdapter adapter1 = ArrayAdapter.createFromResource(
this, R.array.spinnerOptions, android.R.layout.simple_spinner_item);
adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mSpinner.setAdapter(adapter1);
mSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
switch(position) {
case SPINNER_OPTION_FIRST: {
mLabel.setVisibility(View.GONE);
mTextField.setVisibility(View.GONE);
}
case SPINNER_OPTION_SECOND: {
mLabel.setVisibility(View.VISIBLE);
mTextField.setVisibility(View.VISIBLE);
}
}
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
// Do nothing
}
});
}
}
form_fields.xml
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#104667">
<TextView
android:id="@+id/spinner_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="15dip"
android:textStyle="bold"
android:text="Please select an option" />
<Spinner
android:id="@+id/spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/spinner_label"
android:layout_marginLeft="25dip"
android:layout_marginRight="25dip"
android:drawSelectorOnTop="true"
android:prompt="@string/spinnerPrompt" />
<TextView
android:id="@+id/field_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/spinner"
android:layout_centerHorizontal="true"
android:layout_marginTop="15dip"
android:textStyle="bold"
android:text="Enter text here: "
android:visibility="gone" />
<EditText
android:id="@+id/text_field"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="25dip"
android:layout_marginRight="25dip"
android:layout_below="@+id/field_label"
android:visibility="gone" />
</RelativeLayout>
</ScrollView>
謝謝一堆。由於這段代碼是從我的實際應用程序稍微調整的,分號不是實際問題(否則,我的應用程序不會編譯)。實際上,我根本沒有設置我的mLabel成員變量!去搞清楚。我很好奇 - break語句的目的是什麼? – Keeb13r 2010-09-26 05:51:50
沒有'break;'語句將每個'case'語句分隔開來,執行「通過」連續到每個'case'語句。有些原因可能會導致這種情況的發生,但通常使用'switch'模塊來提供替代選項,每個'case'只應該運行該特定條件的代碼。有關'switch'語句的一些示例和詳細解釋,請參閱:http://download.oracle.com/javase/tutorial/java/nutsandbolts/switch.html – Brian 2010-09-26 21:39:52