2016-12-24 1 views
0

Ich habe eine listview, die mit wenigen Einträgen initialisiert wird. In der menu Leiste habe ich eine Option zum Hinzufügen weiterer Einträge, für die eine dialog geöffnet ist und ich drei Felder eingeben muss. Beim Klicken auf die Schaltfläche save werden die Einträge in der listview angezeigt, aber beim Drücken der Zurück-Taste und nach dem Neustart der App wird die ältere listview angezeigt, d. H. Die neu eingegebenen Werte in der listview werden nicht angezeigt.Beim Drücken der Zurück-Taste sind die neuen Einträge in der ListView verschwunden

Der Hauptcode:

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; 
    } 


} 

Irgendwelche Vorschläge?

+0

Ich denke, Problem ist in Ihrer db.insertTask (selectedModel); Methode – NehaK

Antwort

0

Eigentlich in Android, wenn Sie den Wert speichern möchten, müssen Sie SharedPreference verwenden, Sqlite-Datenbank zum Speichern der Daten im Web können Sie MySQl verwenden.

Nun kommen Sie zu Ihrem Problem tatsächlich, wenn Sie ein neues Element in der Listenansicht das Element im lokalen Speicher hinzufügen und Sie Datamodel verwenden, um diese Daten zu verwalten, und wenn Sie die Anwendung beenden, wird der lokale Speicher gelöscht und wenn Sie Führen Sie Ihre Anwendung erneut aus, die Anwendung enthält diese Daten nicht, weshalb die Anwendung keine Elemente in der Listenansicht anzeigt. Wenn Sie diese Daten speichern möchten, verwenden Sie die Datenbank wie oben beschrieben.

+0

Ich habe sqlitedatabase in dieser App verwendet –

+0

Am Anfang der Aktivität, die Sie Daten von SQLite holen? –

+0

Ja, 'db' ist ein Objekt der' sqlithelper' Klasse, mit der ich die Daten von 'sqlite' abrufe. –

Verwandte Themen