【发布时间】:2019-11-05 19:35:46
【问题描述】:
我有一个由三个微调器和一个表格组成的 UI。 (Spinner1, Spinner2, Spinner3) 分别。 Spinner2,Spinner3 根据 Spinner1 的选择交换值。根据我的要求将内容插入表格(LABELS2)
Spinner1,Spinner2,Spinner3 的值是从一个表"LABELS"中检索出来的。
点击保存按钮时,所有三个微调器值都被插入到另一个表 "LABELS2"。
要求:Spinner2 应根据表“Labels”和“Labels2”之间的比较加载内容。
背后的想法是避免数据插入中的重复,并知道保存数据后还剩下多少条记录。
示例:表“标签”有 3 条记录
1.("A1”,”EXTRA1”,”MORE1");
2,("A1”,”EXTRA2”,”MORE2");
3,("A1”,”EXTRA2”,”MORE2");
MainActivity
public class MainActivity extends AppCompatActivity {
DatabaseHandler mDH;
Spinner mSpinner1,mSpinner2,mSpinner3;
Cursor mSpinner1Csr,mSpinner2Csr,mSpinner3Csr;
SimpleCursorAdapter mSpinner1Adapter,mSpinner2Adapter,mSpinner3Adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSpinner1 = this.findViewById(R.id.spinner1);
mSpinner2 = this.findViewById(R.id.spinner2);
mSpinner3 = this.findViewById(R.id.spinner3);
mDH = new DatabaseHandler(this);
addSomeTestingData(); // ADD testing data if none
manageSpinner1(); // Manages spinner1 not that spinner 1 invokes manage spinner2 and spinnr manages spinner3
}
private void addSomeTestingData() {
if(DatabaseUtils.queryNumEntries(mDH.getWritableDatabase(),DatabaseHandler.TABLE_LABELS) > 0) return;
// Data for LABELS2 table (spinner 1 (note 1st column listed in spinner))
mDH.insertLabel("A1”,”EXTRA1”,”MORE1");
mDH.insertLabel("A1”,”EXTRA2”,”MORE2");
mDH.insertLabel("A1”,”EXTRA3”,”MORE5");
mDH.insertLabel1("A1EXTRA1");
mDH.insertLabel1("A1EXTRA2");
mDH.insertLabel1("B1EXTRA1");
mDH.insertLabel1("B1EXTRA2");
mDH.insertLabel1("L1EXTRA1");
mDH.insertLabel1("L1EXTRA2");
// Data for LABELS table (spinner 1,2,3)
mDH.insertlabel("A1”,”EXTRA1”,”MORE1");
mDH.insertlabel("A1”,”EXTRA2”,”MORE2");
mDH.insertlabel("A1”,”EXTRA3”,”MORE5");
}
private void manageSpinner1() {
mSpinner1Csr = mDH.getAllLabelsForSpinner1AsCursor();
if (mSpinner1Adapter == null) {
mSpinner1Adapter = new SimpleCursorAdapter(
this,
android.R.layout.simple_list_item_1,
mSpinner1Csr,
new String[]{DatabaseHandler.KEY_NAME},
new int[]{android.R.id.text1},
0
);
mSpinner1.setAdapter(mSpinner1Adapter);
mSpinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
manageSpinner2(mSpinner1Csr.getString(mSpinner1Csr.getColumnIndex(DatabaseHandler.ROUTE)));
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
} else {
mSpinner1Adapter.swapCursor(mSpinner1Csr);
}
}
private void manageSpinner2(String keyFromSpinner1) {
mSpinner2Csr = mDH.getAllLabelsForSpinner2AsCursor(keyFromSpinner1);
if (mSpinner2Adapter == null) {
mSpinner2Adapter = new SimpleCursorAdapter(
this,
android.R.layout.simple_list_item_1,
mSpinner2Csr,
new String[]{DatabaseHandler.ROUTE},
new int[]{android.R.id.text1},
0
);
mSpinner2.setAdapter(mSpinner2Adapter);
mSpinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
manageSpinner3(mSpinner2Csr.getString(mSpinner2Csr.getColumnIndex(DatabaseHandler.ROUTE)));
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
} else {
mSpinner2Adapter.swapCursor(mSpinner2Csr);
}
}
private void manageSpinner3(String keyForSpinner3) {
mSpinner3Csr = mDH.getAllLabelsForSpinner3AsCursor(keyForSpinner3);
if (mSpinner3Adapter == null) {
mSpinner3Adapter = new SimpleCursorAdapter(
this,
android.R.layout.simple_list_item_1,
mSpinner3Csr,
new String[]{DatabaseHandler.KEY_ID},
new int[]{android.R.id.text1},
0
);
mSpinner3.setAdapter(mSpinner3Adapter);
} else {
mSpinner3Adapter.swapCursor(mSpinner3Csr);
}
}
}
数据库处理程序
public class DatabaseHandler extends SQLiteOpenHelper {
// Database Version
public static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "spinnerExample";
private final Context myContext;
private SQLiteDatabase myDataBase;
// Database Name
// Labels table name
public static final String TABLE_LABELS = "labels"; //<<<< Made public
public static final String TABLE_LABELS1= "labels1";
public static final String TABLE_LABELS2= "labels2";
// Labels Table Columns names
public static final String KEY_ID4 = "input_label";
public static final String KEY_ID12 = "id2"; //<<<< Made public
public static final String KEY_ID = "id";
public static final String KEY_99 = "sno"; //<<<< Made public//<<<< Made public
public static final String KEY_NAME = "name"; //<<<< made public
public static final String KEY_ID1 = "id1"; //<<<< Made public
public static final String KEY_NAME1 = "name1";
public static final String KEY_1 = "number"; //<<<< Made public
public static final String KEY_2 = "outletname"; //<<<< made public
public static final String KEY_3 = "sunday"; //<<<< Made public
public static final String KEY_4 = "monday";
public static final String KEY_5 = "tuesday";
public static final String KEY_6 = "wednesday";
public static final String KEY_7 = "thursday";
public static final String KEY_8 = "saturday";
public static final String KEY_9 = "closed";
public static final String KEY_10 = "calling";
public static final String KEY_11 = "id3";
public static final String ROUTE= "route";
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
myDataBase = this.getWritableDatabase();
this.myContext = context;
}
// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
//boolean dbExist = checkDataBase();
// Category table create query
String CREATE_CATEGORIES_TABLE = "CREATE TABLE " + TABLE_LABELS + "("+ KEY_99 + " INTEGER,"
+ ROUTE + " TEXT," + KEY_ID + " TEXT," + KEY_NAME + " TEXT)";
String CREATE_CATEGORIES_TABLE1 = "CREATE TABLE " + TABLE_LABELS1 + "("
+ KEY_ID1+ " TEXT," + KEY_NAME1+ " TEXT)";
String CREATE_CATEGORIES_TABLE2 = "CREATE TABLE " + TABLE_LABELS2 + "("
+ KEY_11+ " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_1+ " TEXT," + KEY_2+ " TEXT," + KEY_3+ " TEXT)";
db.execSQL(CREATE_CATEGORIES_TABLE);
db.execSQL(CREATE_CATEGORIES_TABLE1);
db.execSQL(CREATE_CATEGORIES_TABLE2);
}
// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS " + TABLE_LABELS);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_LABELS1);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_LABELS2);
// Create tables again
onCreate(db);
}
/**
* Inserting new lable into lables table
* */
public void insertlabel(String text,String id9,String id, String label) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(KEY_99,text);
cv.put(ROUTE,id9);
cv.put(KEY_ID,id);
cv.put(KEY_NAME,label);
db.insert(TABLE_LABELS,null,cv);
db.close();
}
public void insertLabel(String message1, String message2,String message3){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_1, message1);
values.put(KEY_2, message2);
values.put(KEY_3,message3);
// Inserting Row
db.insert(TABLE_LABELS2, null, values);
//db.close(); // Closing database connection
}
public void insertLabel1(String label){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_NAME1, label);
db.insert(TABLE_LABELS1, null, values);
//db.close(); // Closing database connection
}
public void insertLabel2(String label){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_NAME, label);
db.insert(TABLE_LABELS, null, values);
db.close(); // Closing database connection
}
public Cursor getAllLabelsForSpinner1AsCursor() {
String[] columns = new String[]{"rowid AS _id, *"}; // Need _id column for SimpleCursorAdapter
return this.getWritableDatabase().query(TABLE_LABELS,columns,null,null,null,null,null);
}
public Cursor getAllLabelsForSpinner2AsCursor(String keyFromSinner1) {
String[] columns = new String[]{"rowid AS _id, *"}; // Need _id column for SimpleCursorAdapter
return this.getWritableDatabase().query(
TABLE_LABELS,columns,
DatabaseHandler.ROUTE + " LIKE ?",
new String[]{keyFromSinner1+"%"},
null,null,null
);
}
public Cursor getAllLabelsForSpinner3AsCursor(String keyFromSpinner2) {
String[] columns = new String[]{"rowid AS _id, *"}; // Need _id column for SimpleCursorAdapter
return this.getWritableDatabase().query(
TABLE_LABELS,columns,
DatabaseHandler.ROUTE + " LIKE ?",
new String[]{keyFromSpinner2 + "%"},
null,null,null);
}
}
模拟: 正如您可以在下面选择第一个微调器“P1”显示他的相关信息
我们保存每个选择的信息。
要求微调器 2 信息应在数据保存信息时减少。
示例:如果您选择“9001234”,则使用“9001234”保存信息,下一个应该自动出现“9003562”,依此类推。
期待任何帮助。
【问题讨论】:
-
也添加您的微调器适配器代码,以便更好地了解您到目前为止所做的工作。
-
@HaiderSaleem 微调器适配器详细信息已经可用..
-
专家欢迎您的想法
-
@tynn 为您的困惑道歉。是的,我已经按照我的要求提供了信息。如果你愿意,我可以再改一下。当然,非常感谢确实花时间在我的问题上..
-
@mikeT 你能用你的专业知识找到答案吗?
标签: android database android-sqlite android-spinner