Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 更新视图中的微调器并更改其选定项_Android_Sqlite_Spinner - Fatal编程技术网

Android 更新视图中的微调器并更改其选定项

Android 更新视图中的微调器并更改其选定项,android,sqlite,spinner,Android,Sqlite,Spinner,我在安卓系统中遇到了相当简单的布局问题。基本上,我有一个微调器,其中包含来自sqlite数据库的多个项。我还有一些EditText字段,用于接收和显示所选项目的信息。我现在要做的是实现一个按钮,允许用户添加一个新条目并更改其数据-所有这些都在同一个视图中(EditText字段已经编程完成了)。这是我的代码(我试图用新项中的默认数据更新数据库并重新绘制类,但无法将微调器设置为新位置)。你们知道我怎么做吗 public class Activity_MaterialTab extends Activ

我在安卓系统中遇到了相当简单的布局问题。基本上,我有一个微调器,其中包含来自sqlite数据库的多个项。我还有一些EditText字段,用于接收和显示所选项目的信息。我现在要做的是实现一个按钮,允许用户添加一个新条目并更改其数据-所有这些都在同一个视图中(EditText字段已经编程完成了)。这是我的代码(我试图用新项中的默认数据更新数据库并重新绘制类,但无法将微调器设置为新位置)。你们知道我怎么做吗

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中松散地耦合类,因此这只是最佳实践。您的代码也将更易于阅读、理解和理解。