2016-02-13 159 views
1

我已經查看了將spinner保存到數據庫中的所有問題,但似乎沒有任何工作。將Spinner選擇保存到SQLite數據庫中

我已經開始在ItemSelectedListener加入工作,但它拋出回一個錯誤,

這裏是我的代碼

OnItemSelectedListener在這其中我對錶的其餘部分刀片是

public class OnClickListenerCreateMenuItem implements View.OnClickListener { 
@Override 
public void onClick(View view) { 


    final Context context = view.getContext(); 
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    final View formElementsView = inflater.inflate(R.layout.menuitem_input_form, null, false); 

    final EditText editTextItemName = (EditText) formElementsView.findViewById(R.id.editTextItemName); 
    final EditText editTextItemDesc = (EditText) formElementsView.findViewById(R.id.editTextItemDesc); 
    final EditText editTextItemPrice = (EditText) formElementsView.findViewById(R.id.editTextItemPrice); 
    final EditText editTextItemCost = (EditText) formElementsView.findViewById(R.id.editTextItemCost); 
    final Spinner itemCategory = (Spinner) formElementsView.findViewById(R.id.spinnerCategory); 

    itemCategory.setAdapter(
      ((SettingsMenuItem) context).loadSpinnerData() 
    ); 

    itemCategory.setOnItemSelectedListener(
      ((SettingsMenuItem) context).loadSpinnerData() 
    ); 


    new AlertDialog.Builder(context) 
      .setView(formElementsView) 
      .setTitle("Create Item") 
      .setPositiveButton("Add", 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int id) { 


          String itemName = editTextItemName.getText().toString(); 
          String itemDescription = editTextItemDesc.getText().toString(); 
          String itemPrice = editTextItemPrice.getText().toString(); 
          String itemCost = editTextItemCost.getText().toString(); 
          String valueOfSelectedCat= itemCategory.getSelectedItem().toString(); 


          ObjectMenuItem objectMenuItem = new ObjectMenuItem(); 
          objectMenuItem.name = itemName; 
          objectMenuItem.description = itemDescription; 
          objectMenuItem.price = Float.parseFloat(itemPrice); 
          objectMenuItem.cost = Float.parseFloat(itemCost); 
          objectMenuItem.cat = valueOfSelectedCat; 

          boolean createSuccessful = new TableControllerMenuItem(context).create(objectMenuItem); 


          if(createSuccessful){ 
           Toast.makeText(context, "Item was saved.", Toast.LENGTH_SHORT).show(); 
          }else{ 
           Toast.makeText(context, "Unable to save item.", Toast.LENGTH_SHORT).show(); 
          } 
          ((SettingsMenuItem) context).readRecords(); 
          ((SettingsMenuItem) context).countRecords(); 



          dialog.cancel(); 

         } 

        }).show(); 




} 

和我的實際微調器在這裏設置並填充在這裏

public class SettingsMenuItem extends AppCompatActivity { 

Spinner spinner; 
Context context; 
String id; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_settings_menu_item); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    countRecords(); 
    readRecords(); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 

    Button buttonCreateLocation = (Button) findViewById(R.id.btnAdd); 
    buttonCreateLocation.setOnClickListener(new OnClickListenerCreateMenuItem()); 
} 

public void countRecords() { 

    int recordCount = new TableControllerMenuItem(this).count(); 
    TextView textViewRecordCount = (TextView) findViewById(R.id.textViewRecordCount); 
    textViewRecordCount.setText(recordCount + " records found."); 

} 

public void readRecords() { 

    LinearLayout linearLayoutRecords = (LinearLayout) findViewById(R.id.linearLayoutRecords); 
    linearLayoutRecords.removeAllViews(); 

    List<ObjectMenuItem> menuitem = new TableControllerMenuItem(this).read(); 

    if (menuitem.size() > 0) { 

     for (ObjectMenuItem obj : menuitem) { 

      int id = obj.id; 
      String menuitemName = obj.name; 
      String menuitemDescription = obj.description; 
      Float menuitemPrice = obj.price; 
      Float menuitemCost = obj.cost; 
      String itemCategory = obj.cat; 

      String textViewContents = menuitemName; 

      TextView textViewMenuItem = new TextView(this); 
      textViewMenuItem.setPadding(0, 10, 0, 10); 
      textViewMenuItem.setText(textViewContents); 
      textViewMenuItem.setTag(Integer.toString(id)); 
      textViewMenuItem.setTextSize(20.0f); 

      textViewMenuItem.setOnLongClickListener(new OnLongClickListenerMenuItem()); 


      linearLayoutRecords.addView(textViewMenuItem); 
     } 

    } else { 

     TextView locationItem = new TextView(this); 
     locationItem.setPadding(8, 8, 8, 8); 
     locationItem.setText("No records yet."); 

     linearLayoutRecords.addView(locationItem); 
    } 

} 

public ArrayAdapter loadSpinnerData() { 

    Log.d("CON", "setting spinner data"); 

    Spinner s = (Spinner) findViewById(R.id.spinnerCategory); 
    DatabaseHandler h = new DatabaseHandler(getApplicationContext()); 

    List<String> names = h.getAllNames(); 

    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, names); 

    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 




    return dataAdapter; 


} 





    } 

這裏是我的崩潰日誌

---------崩潰 8月2日至14日的開始:29:07.627 14332-14332/com.jenovaprojects.restaurant E/AndroidRuntime:致命異常:主要 過程:com.jenovaprojects.restaurant,PID:14332 java.lang.ClassCastException:android.widget.ArrayAdapter不能在com.jenovaprojects.restaurant.OnClickListenerCreate.OnClickListenerCreateMenuItem.onClick被強制轉換爲android.widget.AdapterView $ OnItemSelectedListener (OnClickListenerCreateMenuItem .java:41) at android.view.View.performClick(View.java:5204) at android.view.View $ PerformClick.run(View.java:21156) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5466) at java.lang.reflect.Method.invoke(Native Method) at com .android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

回答

1

使用來自Android指南此代碼,您應該能夠實現OnItemSelectedListener

public class SpinnerActivity extends Activity implements OnItemSelectedListener { 
... 

    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { 
     // An item was selected. You can retrieve the selected item using 
     parent.getItemAtPosition(pos) 
    } 
} 

我不知道爲什麼它不會工作,但很難說沒有更多的代碼。如果這沒有幫助,請發佈您用於保存選擇的代碼,以便我們可以嘗試弄清楚發生了什麼。

1

請把你的LogCat看到這些錯誤,如果可能的話,顯示你想要插入選定數據的數據庫查詢和表結構。

簡單的程序是把onItemSelected的一個聽衆對你的情況微調把這個

itemCategory.setOnItemSelectedListener(replce your context here); 

然後做要緊實施微調的界面

工具OnItemSelectedListener

時您從微調器中選擇任何項目此方法onItemSelected將被調用。它會將您點擊的物品的位置返回給您,並且您可以輕鬆找出哪個物品被點擊。

adapter.getItemAtPosition(pos).toString() 

通過這個,你會得到該項目的文本。

第二部分 - 插入數據的SQLite數據庫

使數據庫對象和初始化然後調用適當的方法來將您選擇的選擇數據。