Я новичок в 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();
}
}
Извините за плохой английский, если вам нужно больше объяснений, дайте мне знать!
Исправить меня, если я ошибаюсь, вы переходите к другому мероприятию и каждый раз добавляете предметы? –
Да, потому что деятельность, которая получает новые материалы, является таблицей. И пользователь может перетаскивать материалы, добавленные в таблицу. Это школьный дневник. Это плохая идея для вас? Спасибо за ваш ответ. – Mario
Просто используйте статические объекты, и все будет хорошо! –