【问题标题】:At the press of back button the new entries in the ListView are gone按下后退按钮时,ListView 中的新条目消失了
【发布时间】:2016-12-24 12:20:32
【问题描述】:

我有一个listview,它用很少的条目初始化。在menu 栏中,我可以选择添加更多条目,为这些条目打开dialog,我必须输入三个字段。单击save 按钮时,条目将显示在listview 中,但按下后退按钮并在重新启动应用程序后显示较旧的listview,即不显示listview 中新输入的值。

主要代码:

   public class SecondScreen extends ListActivity implements AppCompatCallback,AdapterView.OnItemClickListener {

    private Toolbar bar;
    private AppCompatDelegate delegate;
    List<Model> list;
    Model selectedModel;
    AGSQLiteHelper db;
    Adapter adapter;
    private EditText task_Title,task_Description,task_Date;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        delegate=AppCompatDelegate.create(this,this);
        super.onCreate(savedInstanceState);
        //savedInstanceState.putBoolean("mIsBackButtonPressed",mIsBackButtonPressed);
        delegate.setContentView(R.layout.activity_second_screen);
        bar=(Toolbar)findViewById(R.id.toolbarID);
        delegate.setSupportActionBar(bar);
        ActionBar ab=delegate.getSupportActionBar();
        ab.setDisplayHomeAsUpEnabled(true);
        db=new AGSQLiteHelper(this);
        db.onUpgrade(db.getWritableDatabase(),1,2);
        db.createTask(new Model("abcde","description abcde","19/11/12"));
        db.createTask(new Model("bcdese","description bcdese","18/12/12"));
        db.createTask(new Model("mnbv","description mnbv","2/11/10"));
        db.createTask(new Model("poiuy","description poiuy","1/5/6"));
        list=db.getAllTasks();
        adapter=new Adapter(this,R.layout.row,list);
        getListView().setOnItemClickListener(this);
        setListAdapter(adapter);

    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
    }

    @Nullable
    @Override
    public View onCreateView(String name, Context context, AttributeSet attrs) {

        return super.onCreateView(name, context, attrs);
    }

    @Override
    public void onSupportActionModeStarted(ActionMode mode) {

    }

    @Override
    public void onSupportActionModeFinished(ActionMode mode) {

    }

    @Nullable
    @Override
    public ActionMode onWindowStartingSupportActionMode(ActionMode.Callback callback) {
        return null;
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        if(item.getItemId()==R.id.add){
            Toast.makeText(getApplicationContext(),"Add was clicked",Toast.LENGTH_LONG).show();

            final Dialog dialog=new Dialog(SecondScreen.this);
            dialog.setContentView(R.layout.custom_dialog);
            dialog.setTitle("Dialog");
            Button save_button=(Button)dialog.findViewById(R.id.saveButtonID);
            Button cancel_button=(Button)dialog.findViewById(R.id.cancelButtonID);

            task_Title=(EditText)dialog.findViewById(R.id.titleEditTextID);
            task_Description=(EditText)dialog.findViewById(R.id.descriptionEditTextID);
            task_Date=(EditText)dialog.findViewById(R.id.dateEditTextID);

            dialog.show();

            save_button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    selectedModel=new Model();
                    selectedModel.setTask_title(task_Title.getText().toString());
                    selectedModel.setTask_description(task_Description.getText().toString());
                    selectedModel.setTask_date(task_Date.getText().toString());
                    db.insertTask(selectedModel);
                    //Toast.makeText(getApplicationContext(),"model ="+selectedModel.getTask_title(),Toast.LENGTH_LONG).show();
                    //Log.i("Second Screen","list length before "+list.size());
                    //list=db.getAllTasks();
                    list.add(selectedModel);
                   // Log.i("Second Screen","list length after "+list.size());
                   // Adapter adapter =( Adapter)getListView().getAdapter();
                    //adapter=new Adapter(this,R.layout.row,list);
                    adapter.notifyDataSetChanged();
                    //Toast.makeText(getApplicationContext(),"model ="+selectedModel.getTask_title(),Toast.LENGTH_LONG).show();
                    dialog.dismiss();
                }
            });

            cancel_button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    dialog.dismiss();
                }
            });
        }

        if(item.getItemId()==R.id.done){
            Toast.makeText(getApplicationContext(),"Done was clicked",Toast.LENGTH_LONG).show();
        }
        return true;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu,menu);
        return true;
    }


}

有什么建议吗?

【问题讨论】:

  • 我认为问题出在您的 db.insertTask(selectedModel);方法

标签: android listview onbackpressed


【解决方案1】:

实际上,在android中,如果你想存储你必须使用SharedPreference的值,用于在web中存储数据的Sqlite数据库你可以使用MySQl。

现在实际上是当您在列表视图中添加一个新项目时,该项目存储在本地内存中,并且您正在使用数据模型来管理这些数据,当您终止应用程序时,本地内存将被清除,当您再次运行您的应用程序,应用程序没有这些数据,这就是应用程序未在列表视图中显示项目的原因。如果您想存储这些数据,请使用我上面讨论的数据库。

【讨论】:

  • 我在这个应用中使用了 sqlitedatabase
  • 在活动开始时,您正在从 sqlite 获取数据?
  • 是的,`db` 是 sqlitehelper 类的一个对象,我通过它从 sqlite 获取数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-26
  • 1970-01-01
  • 2011-06-09
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
相关资源
最近更新 更多