Результат полей EditText находится в зависимости от выбора блесны на SQLite (2 Выбор пути )
Значение EditText не отображается при изменении элементов spinner.
Пример : редактирование текста должны показать "9045", если значение счетчика это лодка, она должна быть наоборот я имею в виду, если это изменить текстовое значение 9045 тогда моя ценность блесны должна быть лодка.
Пробовал с нижеприведенным кодом, но все же я не могу привести значение edit text при выборе spinner
Что я уже пробовал:
Основной код деятельности-это
<pre>package com.bar.example.myapplication; public class MainActivity extends AppCompatActivity { public static final String BARCODE_KEY = "BARCODE"; EditText date; DatePickerDialog datePickerDialog; Spinner s1, s2, s3; Button btnAdd; Button send; Button ok; Button ok1; private TextView result1; Button btn_send_mail; private Button button3; private Button btnexport; EditText inputLabel, bResult; TextView tex, tex1; DatabaseHandler dbhndlr; Cursor spinner1csr, spinner2csr, spinner3csr, spinner4csr; SimpleCursorAdapter sca, sca2, sca3, sca4; long spinner1_selected = 0; CheckBox ck1, ck2, ck3, ck4, ck5, ck6, ck7, ck8; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); s1 = (Spinner) findViewById(R.id.spinner1); s2 = (Spinner) findViewById(R.id.spinner2); s3 = (Spinner) findViewById(R.id.spinner5); bResult = (EditText) findViewById(R.id.barcodeResult); btnAdd = (Button) findViewById(R.id.btn_add); inputLabel = (EditText) findViewById(R.id.input_label); dbhndlr = new DatabaseHandler(this); if (DatabaseUtils.queryNumEntries( dbhndlr.getWritableDatabase(), DatabaseHandler.TABLE_LABELS) < 1) { dbhndlr.insertlabel("Ships", "12344", "9133"); dbhndlr.insertlabel("Boat", "93993", "9045"); } spinner1csr = dbhndlr.getAllLabelsAsCursor(); sca = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, spinner1csr, new String[] { DatabaseHandler.KEY_ID }, new int[] { android.R.id.text1 }, 0 ); s1.setAdapter(sca); // Set Spinner1 OnSelectedItemListener s1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView << ? > parent, View view, int position, long id) { // bResult.setText(s1.getSelectedItem().toString()); spinner1_selected = id; spinner2csr = dbhndlr.getByRowid(spinner1_selected); spinner3csr = dbhndlr.getByRowid(spinner1_selected); spinner4csr = dbhndlr.getByRowid(spinner1_selected); sca2.swapCursor(spinner2csr); sca3.swapCursor(spinner3csr); sca4.swapCursor(spinner4csr); } @Override public void onNothingSelected(AdapterView << ? > parent) {} }); spinner2csr = dbhndlr.getByRowid(spinner1_selected); sca2 = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, spinner2csr, new String[] { DatabaseHandler.KEY_NAME }, new int[] { android.R.id.text1 }, 0 ); s2.setAdapter(sca2); spinner3csr = dbhndlr.getByRowid(spinner1_selected); sca3 = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, spinner3csr, new String[] { DatabaseHandler.KEY_ID1 }, new int[] { android.R.id.text1 }, 0 ); s3.setAdapter(sca3); spinner4csr = dbhndlr.getByRowid(spinner1_selected); sca4 = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, spinner4csr, new String[] { DatabaseHandler.KEY_ID1 }, new int[] { android.R.id.text1 }, 0 ); bResult.setAdapter(sca4); btnAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { String label = inputLabel.getText().toString(); if (label.trim().length() > 0) { inputLabel.setText(""); bResult.setText(""); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(inputLabel.getWindowToken(), 0); spinner1csr = dbhndlr.getAllLabelsAsCursor(); spinner2csr = dbhndlr.getByRowid(spinner1_selected); spinner3csr = dbhndlr.getByRowid(spinner1_selected); spinner4csr = dbhndlr.getByRowid(spinner1_selected); sca.swapCursor(spinner1csr); sca2.swapCursor(spinner2csr); sca3.swapCursor(spinner3csr); sca4.swapCursor(spinner4csr); } else { Toast.makeText(getApplicationContext(), "Please enter label name", Toast.LENGTH_SHORT).show(); } } }); } @Override public void onDestroy() { spinner1csr.close(); spinner2csr.close(); spinner3csr.close(); spinner4csr.close(); super.onDestroy(); } }
Код обработчика базы данных таков
<pre>package com.bar.example.myapplication; public class DatabaseHandler extends SQLiteOpenHelper { private static final int DATABASE_VERSION = 1; private static final String DATABASE_NAME = "spinnerExample"; public static final String TABLE_LABELS = "labels"; public static final String KEY_ID = "id"; public static final String KEY_NAME = "name"; public static final String KEY_ID1 = "barcode"; public DatabaseHandler(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { // Category table create query String CREATE_CATEGORIES_TABLE = "CREATE TABLE " + TABLE_LABELS + "(" + KEY_ID + " TEXT," + KEY_NAME + " TEXT," + KEY_ID1 + " TEXT)"; db.execSQL(CREATE_CATEGORIES_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + TABLE_LABELS); onCreate(db); } public void insertlabel(String id, String label, String label1) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues cv = new ContentValues(); cv.put(KEY_ID, id); cv.put(KEY_NAME, label); cv.put(KEY_ID1, label1); db.insert(TABLE_LABELS, null, cv); db.close(); } public List < String > getAllLabels() { List < String > labels = new ArrayList < String > (); String selectQuery = "SELECT * FROM " + TABLE_LABELS; SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery(selectQuery, null); if (cursor.moveToFirst()) { do { labels.add(cursor.getString(0)); } while (cursor.moveToNext()); } // closing connection cursor.close(); db.close(); return labels; } public Cursor getAllLabelsAsCursor() { String[] columns = new String[] { "rowid AS _id, *" }; return this.getWritableDatabase().query(TABLE_LABELS, columns, null, null, null, null, null); } public Cursor getAllLabelsExceptedSelected(long selected) { String[] columns = new String[] { "rowid AS _id, *" }; String whereclause = "rowid <> ?"; String[] whereargs = new String[] { String.valueOf(selected) }; return this.getWritableDatabase().query(TABLE_LABELS, columns, whereclause, whereargs, null, null, null ); } public Cursor getByRowid(long id) { String[] columns = new String[] { "rowid AS _id, *" }; return this.getWritableDatabase().query( TABLE_LABELS, columns, "rowid=?", new String[] { String.valueOf(id) }, null, null, null ); } }
Richard MacCutchan
- Пробовал во многих отношениях, но все время терпит неудачу."
Пожалуйста, отредактируйте свой вопрос и объясните, что это должно означать.
David Crow
В вашем onItemSelected()
обработчик для s1
, нет никакого кода, который вызывает setText()
. Устанавливаете ли вы текст для EditText
контроль каким-то другим способом?
David Crow
Самый маленький пример, который я мог бы придумать, выглядит примерно так:
public class MainActivity extends AppCompatActivity { EditText edit = null; Spinner spinner = null; //================================================================ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); edit = (EditText) findViewById(R.id.edit); spinner = (Spinner) findViewById(R.id.spinner); String[] months = new DateFormatSymbols().getMonths(); ArrayAdapter adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, months); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { edit.setText(String.valueOf(position + 1)); } }); edit.addTextChangedListener(new TextWatcher() { @Override public void afterTextChanged(Editable s) { try { int nPosition = Integer.parseInt(s.toString()); if (nPosition >= 1 && nPosition <= 12) spinner.setSelection(nPosition - 1); } catch(NumberFormatException nfe) { } } }); } }
На самом деле он просто отличается тем, как заполняется элемент управления spinner: ваш код заполняет его из базы данных, а мой-из массива. Однако после заселения он ведет себя одинаково.
Maybeok
Дэвид, спасибо за твое другое направление. Я попытался последовать за ним с успехом. "bResult.setText( spinner1csr.getString( spinner1csr.getColumnIndex(DatabaseHandler.KEY_ID1) ) );" но проблема здесь в том, что я не могу изменить значение счетчика на основе изменения textview.. какие могут быть ваши предложения ???
David Crow
"...я не могу изменить значение прядильщика..."
Это не так уж много значит. В вашем коде я не вижу призыва к setSelection()
. Как еще вы пытаетесь изменить значение счетчика это?
Maybeok
Именно это я и пытался сделать. С другой код, я в состоянии изменить виджет TextView в зависимости от выбора блесны. А теперь я пытаюсь использовать обратный метод . где spinner изменяется на основе изменения textview. Поможет ли вам ваш код ?? textview-это result1, а spinner-s1 result1.addTextChangedListener(новый TextWatcher() {
@Ручная коррекция
общественного недействительными beforeTextChanged(объект CharSequence с начала инт рассчитывать интервал, интервал после) {
}
@Ручная коррекция
общественного недействительными метода ontextchanged(CharSequence оцените, начнем интервал, интервал перед, интервал посчитать) {
{
}
}
@Ручная коррекция
public void afterTextChanged(редактируемые s) {
пробовать
{
инт номер элемента = число.parseInt(С. метод toString());
если (nPosition >= 1 && nPosition <= 12)
С1.помощью методов setselection(номер элемента - 1);
}
catch(NumberFormatException nfe)
{
}
}
});