2015-02-13 3 views
0

Я новичок в Android и Java. Я создаю класс, который содержит список материалов, и пользователь может добавлять новые материалы из другой деятельности Dialog. Когда пользователь добавляет новый материал из операции Dialog, он теряет старый материал. Очевидно, это происходит потому, что каждый раз, когда приложение вызывает приемник активности, активность снова запускает класс (это проблема?). Это код деятельности, которые получают данные от DialogAndroid-класс, содержащий список объектов

package com.ddz.diarioscolastico; 

import android.app.ActionBar.LayoutParams; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.LinearLayout; 
import android.widget.TextView; 

public class ActivitySetOrario extends ActionBarActivity { 

TextView textView; 
DataBase DB = new DataBase(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_set_orario); 
}//Fine oncreate 

//Prende indietro la materia aggiunta dall'ActivityAddMateria 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (requestCode == 1) { 
     if(resultCode == RESULT_OK){ 

      String result = data.getStringExtra("result");     
      Materia materia; 
      materia = new Materia(); 
      materia.setMateria(result); 
      materia.setColor(getResources().getColor(R.color.verde)); 
      DB.getMaterie().add(materia); 

      LinearLayout mLayout = (LinearLayout) findViewById(R.id.contenitorematerie); 
      LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
        new LayoutParams(LayoutParams.WRAP_CONTENT, 
            LayoutParams.WRAP_CONTENT)); 
      params.setMargins(30, 0, 0, 0); 

      for(int i=0; i< DB.getMaterie().size(); i++) 
      { 
       textView = new TextView(this); 
       textView.setText(DB.getMaterie().get(i).getMateria()); 
       textView.setBackgroundColor(DB.getMaterie().get(i).getColor()); 
       textView.setLayoutParams(params); 
       mLayout.addView(textView); 
      } 

     } 

     if (resultCode == RESULT_CANCELED) { 
      //Nessuna materia inserita 
     } 
    } 
}//onActivityResult 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_set_orario, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 

    switch (item.getItemId()) { 
    case R.id.draw_orario: 
     addMateria(); 
     return true; 
    case R.id.save_data_orario: 
     //SERIALIZZO I DATI CHE DOVRA PRENDERE ActivityOrario 
     //FileOutputStream fos = context.openFileOutput(fileName, Context.MODE_PRIVATE); 
     //ObjectOutputStream os = new ObjectOutputStream(fos); 
     //os.writeObject(this); 
     //os.close(); 
     //fos.close(); 
     backToOrario(); 
     return true;  
    case R.id.exit_orario: 
     //Torno alla schermata orario annullo ogni modifica NON SERIALIZZO 
     backToOrario(); 
     finish(); 
     return true;  
    case R.id.action_settings: 
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 

//Torna alla ActivityOrario 
public void backToOrario(){ 
    Intent myIntent = new Intent(ActivitySetOrario.this, ActivityOrario.class); 
    startActivity(myIntent); 
} 

public void addMateria(){ 
    //StartActivityForResult perchè mi aspetto la materia inserita dall'altra activity 
    Intent myIntent = new Intent(ActivitySetOrario.this, ActivityAddMateria.class); 
    ActivitySetOrario.this.startActivityForResult(myIntent, 1); 
} 
} 

DataBase DB = new DataBase(); каждый раз называем этот новый DataBase и я теряю старые данные!

В этом проблема? Я пытаюсь использовать глобальную переменную, но я не знаю, где мне нужно создать экземпляр класса только один раз!

package com.ddz.diarioscolastico; 

import android.app.Application; 

class MyApp extends Application { 

    public DataBase DB = new DataBase(); 

    public DataBase getState(){ 
    return DB; 
    } 
    public void setState(){ 
     DB = new DataBase(); 
    } 
} 

Извините за плохой английский, если вам нужно больше объяснений, дайте мне знать!

+0

Исправить меня, если я ошибаюсь, вы переходите к другому мероприятию и каждый раз добавляете предметы? –

+0

Да, потому что деятельность, которая получает новые материалы, является таблицей. И пользователь может перетаскивать материалы, добавленные в таблицу. Это школьный дневник. Это плохая идея для вас? Спасибо за ваш ответ. – Mario

+0

Просто используйте статические объекты, и все будет хорошо! –

ответ

0

Вы можете либо сохранить их в каком-либо другом классе с помощью модификатора static, либо использовать SharedPreferences или некоторую базу данных.

+0

Мне нужно прочитать, что такое SharedPreferences .... но для базы данных это не нормально. Мне нужно сохранить небольшие данные, я использую сериализованные файлы. Но перед созданием файла необходимо создать список материалов. Спасибо – Mario

+0

Тогда 'SharedPreferenced' специально предназначены для сохранения небольшого количества ключевых значений. http://developer.android.com/training/basics/data-storage/shared-preferences.html –

+0

Я прочитаю документацию, спасибо за вашу помощь. – Mario

Смежные вопросы