2 Stimmen

Android - Spinner zum Ausblenden/Anzeigen von View-Objekten verwenden

Für eine Android-Anwendung versuche ich, einen Spinner zu verwenden, der bei Auswahl einer Option die entsprechenden View-Objekte ausblendet/anzeigt. Für meine Anwendung sind diese Objekte ein EditText und ein zugehöriges TextView-Label für das Feld. Leider scheine ich den EditText nicht zum Ausblenden/Anzeigen zu bringen, und wenn ich den Code zum Ausblenden/Anzeigen der TextView hinzufüge, erhalte ich eine NullPointerException. Ich vermute, dass, da ich die Ansichtsobjekte in einem RelativeLayout, durch Ausblenden eines der Ansichtsobjekte, ich seine Beziehung mit anderen Ansichtsobjekten, daher die NullPointer entfernen.

Kann jemand herausfinden, warum das passieren könnte? Hier ist mein Code:

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>

2voto

Brian Punkte 16145

Der von Ihnen gepostete Code enthält ein paar kleine Lücken. Als ich die folgenden Änderungen vorgenommen habe, konnte ich Ihren Code erfolgreich kompilieren und ausführen.

  1. Es fehlt ein Semikolon nach

    mLabel = (TextView) findViewById(R.id.field_label)
  2. Einfügen einer break; Anweisung zwischen Ihren beiden case Optionen.

  3. Sie können unnötige Klammern um Ihr case Erklärungen.

    case SPINNER_OPTION_FIRST:
        mLabel.setVisibility(View.GONE);
        mTextField.setVisibility(View.GONE);
        break;        
    case SPINNER_OPTION_SECOND:
        mLabel.setVisibility(View.VISIBLE);
        mTextField.setVisibility(View.VISIBLE);
  4. Obwohl es nicht notwendig ist, um Ihr Programm zum Laufen zu bringen, wäre es besser, explizit anzugeben ArrayAdapter<CharSequence> bei der Festlegung adapter1 um Typenprobleme zu vermeiden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X