Android 更新视图中的微调器并更改其选定项
我在安卓系统中遇到了相当简单的布局问题。基本上,我有一个微调器,其中包含来自sqlite数据库的多个项。我还有一些EditText字段,用于接收和显示所选项目的信息。我现在要做的是实现一个按钮,允许用户添加一个新条目并更改其数据-所有这些都在同一个视图中(EditText字段已经编程完成了)。这是我的代码(我试图用新项中的默认数据更新数据库并重新绘制类,但无法将微调器设置为新位置)。你们知道我怎么做吗Android 更新视图中的微调器并更改其选定项,android,sqlite,spinner,Android,Sqlite,Spinner,我在安卓系统中遇到了相当简单的布局问题。基本上,我有一个微调器,其中包含来自sqlite数据库的多个项。我还有一些EditText字段,用于接收和显示所选项目的信息。我现在要做的是实现一个按钮,允许用户添加一个新条目并更改其数据-所有这些都在同一个视图中(EditText字段已经编程完成了)。这是我的代码(我试图用新项中的默认数据更新数据库并重新绘制类,但无法将微调器设置为新位置)。你们知道我怎么做吗 public class Activity_MaterialTab extends Activ
public class Activity_MaterialTab extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_materialtab);
//Opens database
final SQLiteDatabase Estrutura = openOrCreateDatabase("Estutura.db", Context.MODE_PRIVATE, null);
final Cursor cursor = Estrutura.rawQuery("SELECT * FROM MATERIAIS ORDER BY [_id] ASC", null);
final Spinner spnMaterial = (Spinner) findViewById(R.id.mat_spn_material);
final EditText dVol = (EditText) findViewById(R.id.mat_frm_densidade);
final EditText modE = (EditText) findViewById(R.id.mat_frm_elasticidade);
final EditText nome = (EditText) findViewById(R.id.mat_frm_nome);
final ImageButton addMaterial = (ImageButton) findViewById(R.id.mat_btm_add);
final ImageButton excMaterial = (ImageButton) findViewById(R.id.mat_btm_exc);
final Bundle sis = savedInstanceState;
//Spinner
String from[] = {"_id","nome","modE","dVol"};
int to[] = {R.id.txvid,R.id.txvnome,R.id.txvmodE,R.id.txvdVol};
SimpleCursorAdapter ad = new SimpleCursorAdapter(getBaseContext(), R.layout.sp_material, cursor, from, to, 0);
spnMaterial.setAdapter(ad);
try {
spnMaterial.setSelection(sis.getInt("pos"));
} catch (Exception e) {}
//Updates Edittext fields
modE.setText(String.valueOf(cursor.getDouble(2)));
dVol.setText(String.valueOf(cursor.getDouble(3)));
spnMaterial.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,int position, long id) {
Cursor cursor2 = Estrutura.rawQuery("SELECT * FROM MATERIAIS ORDER BY [_id] ASC", null);
cursor2.moveToPosition(cursor.getPosition());
nome.setText(String.valueOf(cursor2.getDouble(1)));
modE.setText(String.valueOf(cursor2.getDouble(2)));
dVol.setText(String.valueOf(cursor2.getDouble(3)));
cursor.moveToPosition(position);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
modE.addTextChangedListener(new TextWatcher()
{
@Override
public void beforeTextChanged(CharSequence s, int start, int count,int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before,int count) {}
@Override
public void afterTextChanged(Editable s) {
if (modE.length() != 0) {
String sql = "UPDATE MATERIAIS SET modE="+modE.getText().toString()+" WHERE [_id]="+String.valueOf(cursor.getInt(0));
Estrutura.execSQL(sql);
}
}
});
dVol.addTextChangedListener(new TextWatcher()
{
@Override
public void beforeTextChanged(CharSequence s, int start, int count,int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before,int count) {}
@Override
public void afterTextChanged(Editable s) {
if (dVol.length() != 0) {
String sql = "UPDATE MATERIAIS SET dVol="+dVol.getText().toString()+" WHERE [_id]="+String.valueOf(cursor.getInt(0));
Estrutura.execSQL(sql);
}
}
});
addMaterial.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) {
String sql = "INSERT INTO MATERIAIS(nome,modE,dVol) VALUES('Nome',0,0)";
Estrutura.execSQL(sql);
sis.putInt("pos", cursor.getPosition());
onCreate(sis);
spnMaterial.setSelection(3);
}
});
}
公共类活动\u MaterialTab扩展活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_materialtab);
//打开数据库
最终SQLiteDatabase-Estrutura=openOrCreateDatabase(“Estutura.db”,Context.MODE_PRIVATE,null);
最终光标=Estrutura.rawQuery(“按[\u id]ASC从物料订单中选择*”,null);
最终微调器spn材质=(微调器)findViewById(R.id.mat\u spn\u材质);
最终编辑文本dVol=(编辑文本)findViewById(R.id.mat\u frm\u densitidade);
最终编辑文本模式=(编辑文本)findViewById(R.id.mat\u frm\u elasticidade);
最终编辑文本nome=(编辑文本)findViewById(R.id.mat\u frm\u nome);
最终ImageButton addMaterial=(ImageButton)findViewById(R.id.mat\u btm\u add);
最终ImageButton exc材料=(ImageButton)findViewById(R.id.mat_btm_exc);
最终束sis=保存状态;
//纺纱机
来自[]的字符串={“\u id”,“nome”,“modE”,“dVol”};
int到[]={R.id.txvid,R.id.txvnome,R.id.txvmodE,R.id.txvdVol};
SimpleCursorAdapter ad=新的SimpleCursorAdapter(getBaseContext(),R.layout.sp_材质,光标,从,到,0);
spnMaterial.setAdapter(ad);
试一试{
SPN材料设置选择(sis.getInt(“pos”);
}捕获(例外e){}
//更新编辑文本字段
modE.setText(String.valueOf(cursor.getDouble(2));
setText(String.valueOf(cursor.getDouble(3));
spnMaterial.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
Cursor cursor2=Estrutura.rawQuery(“按[\u id]ASC从物料订单中选择*”,null);
cursor2.moveToPosition(cursor.getPosition());
nome.setText(String.valueOf(cursor2.getDouble(1));
modE.setText(String.valueOf(cursor2.getDouble(2));
setText(String.valueOf(cursor2.getDouble(3));
光标。移动位置(位置);
}
@凌驾
未选择公共无效(AdapterView父级){
}
});
modE.addTextChangedListener(新的TextWatcher()
{
@凌驾
public void beforeTextChanged(字符序列s、int start、int count、int after){}
@凌驾
public void onTextChanged(字符序列,int start,int before,int count){}
@凌驾
公共无效后文本已更改(可编辑){
如果(modE.length()!=0){
String sql=“UPDATE materialis SET modE=“+modE.getText().toString()+”其中[_id]=”+String.valueOf(cursor.getInt(0));
execSQL(sql);
}
}
});
addTextChangedListener(新的TextWatcher()
{
@凌驾
public void beforeTextChanged(字符序列s、int start、int count、int after){}
@凌驾
public void onTextChanged(字符序列,int start,int before,int count){}
@凌驾
公共无效后文本已更改(可编辑){
如果(dVol.length()!=0){
String sql=“UPDATE materialis SET dVol=“+dVol.getText().toString()+”其中[_id]=”+String.valueOf(cursor.getInt(0));
execSQL(sql);
}
}
});
addMaterial.setOnClickListener(新的OnClickListener()
{
@凌驾
公共void onClick(视图v){
String sql=“插入物料(nome、modE、dVol)值('nome',0,0)”;
execSQL(sql);
sis.putInt(“pos”,cursor.getPosition());
onCreate(sis);
SPN材料选择(3);
}
});
}
}我将重新构造您的应用程序,使数据库逻辑位于单独的类中,并创建一个数据对象。然后可以打开数据库,通过数据对象的实例加载数据,关闭数据库,并持久化数据对象。然后你可以对对象进行任何需要的操作,并根据需要再次将其保存到数据库中。因此,我曾想过这样做,但我认为我会失去一些布局的动态性。我不能用意图来做这件事吗?传递光标上的最后一个位置并再次调用onCreate类?为什么布局的动态性会降低?目标是在OOP中松散地耦合类,因此这只是最佳实践。您的代码也将更易于阅读、理解和理解。