【问题标题】:Android temp update spinner before it gets values from SQLite在从 SQLite 获取值之前,Android 临时更新微调器
【发布时间】:2013-10-03 15:01:06
【问题描述】:

我想知道在将微调器提交到数据库并从那里检索之前,是否有一些技巧可以从 edittext 和 onClick 更新微调器?列表和 spinnerAdapter 设置为从数据库中检索值,所以我知道这个问题可能很愚蠢。

我在想这个逻辑:输入一些文本到edittext,单击确定,然后用这个文本临时更新微调器,在它进入数据库之前,然后在活动中做一些其他的事情,最后将所有内容提交到数据库。当您再次关闭并打开活动时,临时值会丢失,但微调器会使用相同的值填充,但这次来自数据库。

这里有一些代码:

    public class Vnos extends Activity {

 //... some values

    @Override
    protected void onCreate(Bundle savedInstanceState) {

//... 

        final Spinner spinner = (Spinner) findViewById(R.id.spinner1);

        final List<VnosiDB> spinerItems = datasource.getAllNiz();
        final ArrayAdapter<VnosiDB> spinnerAdapter = new ArrayAdapter<VnosiDB>(
                this, android.R.layout.simple_spinner_item, spinerItems);
        spinnerAdapter
                .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(spinnerAdapter);
        String nizIzSpinerja = spinner.getItemAtPosition(
                spinner.getSelectedItemPosition()).toString();
        nizDB = nizIzSpinerja;

        // nov niz

        novNiz = (TextView) findViewById(R.id.dodaj);
        novNiz.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                final Dialog dialog = new Dialog(Vnos.this,
                        android.R.style.Theme_Holo_Dialog);
                dialog.setContentView(R.layout.nov_niz);

                TextView okNov = (TextView) dialog.findViewById(R.id.okNovNiz);
                okNov.setOnClickListener(new android.view.View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub

                        EditText inputNiz = (EditText) dialog
                                .findViewById(R.id.niz);
                        dialog.dismiss();
                        nizDB = inputNiz.getText().toString();
                        spinnerAdapter.notifyDataSetChanged();

                    }
                });

                dialog.show();

            }

        });


// ...some other code...
//...
//.. then, here I commit everything to database...

        shrani = (TextView) findViewById(R.id.shrani);
        shrani.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                vnosDB = (int) System.currentTimeMillis();

                datasource.createVnos(zacetekDB, razlikaDB, nizDB, deloDB,
                        postavkaDB, dodatekDB, opisDB, vnosDB);
                datasource.close();
                Toast test = Toast.makeText(Vnos.this, "Vnos " + deloDB
                        + " uspešen!", Toast.LENGTH_LONG);
                test.show();
                startActivity(new Intent("com.sandpit.jazstudent.URE"));
                finish();

            }
        });


}

}

【问题讨论】:

    标签: android android-sqlite android-spinner


    【解决方案1】:

    您正在使用ArrayAdapter,它由List&lt;VnosiDB&gt; 加载。我假设VnosiDB 代表数据库中的一条记录。为什么不在需要时在此列表中放置一个临时记录?

    List<VnosiDB> spinerItems = new ArrayList<VnosiDB>();
    VnosiDB tempRec = new VnosiDB();
    //set some values to the properties if you need to
    spinnerItems.add(tempRec);
    //populate the spinner with the temp record
    

    【讨论】:

    • 是的,VnosiDB 代表数据库中的一条记录。当我将该代码放入我的第一个 onClick 时,我遇到的第一个错误是:无法实例化类型 List - 如果我删除行 List spinerItems = new List();并做:tempRec = (VnosiDB) inputNiz.getText();,我在日志中得到了无法转换的错误。
    • 我的错,List是接口,使用List&lt;VnosiDB&gt; spinerItems = new ArrayList&lt;VnosiDB&gt;();
    • 仍然无法转换到 VnosiDB。 VnosiDB 是一个包含基本数据库方法的类,例如:getId、setId、get..、set..、...
    • 这个tempRec = (VnosiDB) inputNiz.getText() 有什么意义。不能将 String 转换为 VnosiDB 是正常的。你甚至期望这会产生什么结果??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 2015-01-25
    相关资源
    最近更新 更多