2013-05-27 46 views
0

我有註冊表單,它有兩個edittexts和一個微調適配器,用於選擇數組中的性別選擇和值,當我點擊註冊按鈕並選擇一個成功的性別時,但是當我不選擇性別並單擊註冊按鈕時它會接近力量嗎?帶有適配器的Android微調器獲取強制關閉?

這裏是我完整的代碼....

MainActivity

EditText Fullname, Email; 
Spinner GenderSpinner; 
Button btnReg; 

    @Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    // Importing all assets like buttons, text fields 
    Fullname = (EditText) findViewById(R.id.full_name); 
    Email = (EditText) findViewById(R.id.Email); 

    // Gender = (EditText) findViewById(R.id.Gender); 

    GenderSpinner = (Spinner) findViewById(R.id.Gender); 
    ArrayAdapter<CharSequence> GenderAdapter = ArrayAdapter 
      .createFromResource(this, R.array.sex, 
        android.R.layout.simple_spinner_item); 
    GenderAdapter 
      .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    GenderSpinner.setPrompt("SELECT YOUR GENDER"); 

    GenderSpinner.setAdapter(new NothingSelectedSpinnerAdapter(
      GenderAdapter, R.layout.gender_nothing_selected, MainActivity.this)); 

    btnReg = (Button) findViewById(R.id.btnReg); 
    btnReg.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // Read EditText dat 
      String fullname = Fullname.getText().toString(); 
      String email = Email.getText().toString(); 
      String gender = GenderSpinner.getSelectedItem().toString(); 

     } 
    }); 
} 

}

NothingSelectedSpinnerAdapter

protected static final int EXTRA = 1; 
protected SpinnerAdapter adapter; 
protected Context context; 
protected int nothingSelectedLayout; 
protected int nothingSelectedDropdownLayout; 
protected LayoutInflater layoutInflater; 

public NothingSelectedSpinnerAdapter(SpinnerAdapter spinnerAdapter, 
     int nothingSelectedLayout, Context context) { 
    this(spinnerAdapter, nothingSelectedLayout, -1, context); 
} 

public NothingSelectedSpinnerAdapter(SpinnerAdapter spinnerAdapter, 
     int nothingSelectedLayout, int nothingSelectedDropdownLayout, 
     Context context) { 
    this.adapter = spinnerAdapter; 
    this.context = context; 
    this.nothingSelectedLayout = nothingSelectedLayout; 
    this.nothingSelectedDropdownLayout = nothingSelectedDropdownLayout; 
    layoutInflater = LayoutInflater.from(context); 
} 

@Override 
public final View getView(int position, View convertView, ViewGroup parent) { 
    if (position == 0) { 
     return getNothingSelectedView(parent); 
    } 
    return adapter.getView(position - EXTRA, null, parent); 

} 

protected View getNothingSelectedView(ViewGroup parent) { 
    return layoutInflater.inflate(nothingSelectedLayout, parent, false); 
} 

@Override 
public View getDropDownView(int position, View convertView, ViewGroup parent) { 
    // BUG! Vote to fix!! 
    // http://code.google.com/p/android/issues/detail?id=17128 - Spinner 
    // does not support multiple view types 
    if (position == 0) { 
     return nothingSelectedDropdownLayout == -1 ? new View(context) 
       : getNothingSelectedDropdownView(parent); 
    } 

    return adapter.getDropDownView(position - EXTRA, null, parent); // could 
                     } 

protected View getNothingSelectedDropdownView(ViewGroup parent) { 
    return layoutInflater.inflate(nothingSelectedDropdownLayout, parent, 
      false); 
} 

@Override 
public int getCount() { 
    int count = adapter.getCount(); 
    return count == 0 ? 0 : count + EXTRA; 
} 

@Override 
public Object getItem(int position) { 
    return position == 0 ? null : adapter.getItem(position - EXTRA); 
} 

@Override 
public int getItemViewType(int position) { 
    return position == 0 ? getViewTypeCount() - EXTRA : adapter 
      .getItemViewType(position - EXTRA); 
} 

@Override 
public int getViewTypeCount() { 
    return adapter.getViewTypeCount() + EXTRA; 
} 

@Override 
public long getItemId(int position) { 
    return adapter.getItemId(position - EXTRA); 
} 

@Override 
public boolean hasStableIds() { 
    return adapter.hasStableIds(); 
} 

@Override 
public boolean isEmpty() { 
    return adapter.isEmpty(); 
} 

@Override 
public void registerDataSetObserver(DataSetObserver observer) { 
    adapter.registerDataSetObserver(observer); 
} 

@Override 
public void unregisterDataSetObserver(DataSetObserver observer) { 
    adapter.unregisterDataSetObserver(observer); 
} 

@Override 
public boolean areAllItemsEnabled() { 
    return false; 
} 

@Override 
public boolean isEnabled(int position) { 
    return position == 0 ? false : true; // don't allow the 'nothing 

} 

}

+2

發佈您的logcat – ianhanniballake

回答

1

它升ooks像你,因爲什麼也沒有選擇,以便GenderSpinner.geSelecetedItem()null當您嘗試調用toString()就在這裏

String gender = GenderSpinner.getSelectedItem().toString(); 

越來越null。您可以將選定的項目設置爲默認項目,或者如果您要強制用戶選擇項目,那麼在運行此代碼時,您可以在此處檢查null,如果是,則顯示消息給用戶以選擇性別。

如果使用第二個選項去,那麼你可以考慮使用RadioButtons因爲這將是對用戶而言自然或使用文本提示作爲Spinner用的類似消息的默認值「請選擇一個性別」