写一个股票记录APP,月目标数据可弹出一个Dialog进行修改。

但返回后发现数据没变,TextView也没变,原来代码是在 确定 的button内绑定数据更新代码

//本月目标对话框    private void targetDialog(){        final EditText dialogTV=new EditText(MainActivity.this);        dialogTV.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);        AlertDialog.Builder targetD=new AlertDialog.Builder(MainActivity.this);        targetD.setView(dialogTV);        targetD.setTitle("修改本月目标");        targetD.setPositiveButton("确定", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                if(TextUtils.isEmpty(dialogTV.getText())){                    Toast.makeText(MainActivity.this,"Input can not empty.",Toast.LENGTH_SHORT).show();                }else {                    float mtarget=Float.parseFloat(dialogTV.getText().toString().trim());                                        /* 存入mTarget*/                    try{                        MyDataBaseHelper helper=new MyDataBaseHelper(MainActivity.this);                        SQLiteDatabase db=helper.getWritableDatabase();                        ContentValues cv=new ContentValues();                        cv.put(COLUMN_MONTHDATA_MTARGET,mtarget);                        db.update(TABLE_MONTHDATA,cv,"mYear=? and mMonth=?",new String[]{MainJumpYear,MainJumpMonth});                        Toast.makeText(MainActivity.this,"insert"+mtarget+MainJumpYear+MainJumpMonth,Toast.LENGTH_SHORT).show();                        //db.execSQL("UPDATE monthdata set mTarget="+mtarget+" WHERE mYear="+MainJumpYear+" and mMonth="+MainJumpMonth);                        db.close();                    }catch (SQLException e){                        Toast.makeText(MainActivity.this,"SQL wrong",Toast.LENGTH_SHORT).show();                    }                }            }        }).show();    }

后来找到问题所在,MainActivity是一个singleTask的活动,我在onPause()内绑定了把页面数据更新的函数returnSave():

 //退出时保存数据或输入新mTarget保存    private void returnSave(){        try{            dbHelper=new MyDataBaseHelper(this);            SQLiteDatabase sqLiteDatabase=dbHelper.getWritableDatabase();            ContentValues contentValues=new ContentValues();            contentValues.put("mTarget",mTartget.getText().toString());            sqLiteDatabase.update("monthdata",contentValues,"mYear=? and mMonth=?",new String[]{MainJumpYear,MainJumpMonth});            sqLiteDatabase.close();            contentValues.clear();        }catch (SQLiteException e){        }    }

因此就算数据库内数据更新了,一跳转后,数据又被改回去了。因而我选择一种折中方法,直接修改TextView的值,等跳转时就可以修改数据了。但问题又来了,光修改TextView,里面的其他数据不会变动,看起来就很别扭,如何刷新当前数据呢?

查了下相关的做法,找了三种:

 1.手动刷新activity界面的数据:在activity类下增加一个refresh()方法
注意这种刷新方法只适用于只有一个activity的实例
 

public void refresh() {onCreate(null);} 


2.刷新另一个activity界面数据(自动刷新):
在涉及到刷新的activity类下重写onResume()方法 

/*** 调用onCreate(), 目的是刷新数据,  从另一activity界面返回到该activity界面时, 此方法自动调用*/@Overrideprotected void onResume() {super.onResume();onCreate(null); }

3.先保存saveInstanceState,再刷新页面

    //刷新另一个activity界面数据:    public Bundle s;        @Override    protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);          this.s = savedInstanceState;  

对于第一种,无法使用,可能因为Activity比较多,第二种太频繁,第三种未尝试,感觉也不太好用。

还是自己想办法,想到TextView修改了,直接刷新数据就行了,就把returnSave()做到button里,然后再直接跳到onResume(),把数据Cursor更新放到onResume()里,问题解决了。本来想放到onRestart()内,但是这样就多了不少代码。

修改后的Dialog代码:

//本月目标对话框    private void targetDialog(){        final EditText dialogTV=new EditText(MainActivity.this);        dialogTV.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);        AlertDialog.Builder targetD=new AlertDialog.Builder(MainActivity.this);        targetD.setView(dialogTV);        targetD.setTitle("修改本月目标");        targetD.setPositiveButton("确定", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                if(TextUtils.isEmpty(dialogTV.getText())){                    Toast.makeText(MainActivity.this,"Input can not empty.",Toast.LENGTH_SHORT).show();                }else {                                        mTartget.setText(dialogTV.getText());                    //存入数据                    returnSave();                    //刷新页面数据,onResume()内重新加载数据                    onResume();                                    }            }        }).show();    }

对于效率,感觉还行,刷新频率不高,还有待改进的地方以后接着写。
 

更多相关文章

  1. android日记-
  2. 【073】Android(安卓)数据存储(SQLite)
  3. Android(安卓)ViewPager事件滑动监听修改
  4. Android(安卓)ListView字母索引(仿微信通讯录列表)
  5. 一起学android opengl之光照
  6. Android设置锁屏/休眠时长
  7. Android(安卓)ContentProvider共享数据
  8. Android(安卓)Studio Git 修改用户名、密码、URL
  9. Android(安卓)O中修改NotificationChannel 属性,升级app后该修改

随机推荐

  1. 什么是机器学习?有哪些分类?到底有什么用?终
  2. 从游戏AI到自动驾驶,一文看懂强化学习的概
  3. Python代码实操:详解数据清洗
  4. AER强调计量方法的重要性, 经济学因果分
  5. 迎战SDR、EW应用: Curtiss-Wright推出专用
  6. 基于Apache Flink的爱奇艺实时计算平台建
  7. Xilinx参与25G和50G互连性测试大会
  8. 中介效应最新进展: 中介效应中的工具变量
  9. 以太网的下一阶段:400GE网络
  10. 微博基于Flink的机器学习实践