2017-06-25 6 views
0

2つのアクティビティに2つのArrayListがあります。最初のArrayListには約1000個のアイテム(JSONファイルに保存されています)が含まれ、2番目のArrayListには0個のアイテムが含まれています。切り替え後のArrayListデータの保存

「のonClick」とArrayList2に1つのアイテムを追加します。しかし、私はアプリケーションを閉じたときに活動が文句を言わない節約することが可能です。

これらの変更を保存するにはどうすればよいですか?

1.MainActivity:

public class MainActivity extends AppCompatActivity { 

static ArrayList<Recipe> recipeList = new ArrayList(); 
public class ObjList{ 
    public ArrayList<String> recipeList = new ArrayList<>(); 
} 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mListView = (ListView) findViewById(R.id.recipe_list_view); 
    recipeList = Recipe.getRecipesFromFile("recipes.json", this); 
    String[] listItems = new String[recipeList.size()]; 
    for (int i = 0; i < recipeList.size(); i++) { 
     Recipe recipe = recipeList.get(i); 
     listItems[i] = recipe.title; 
    } 


    final RecipeAdapter adapter = new RecipeAdapter(this, recipeList); 
    mListView.setAdapter(adapter); 
    final Context context = this; 
    mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Recipe selectedRecipe = recipeList.get(position); 
      recipeList.remove(selectedRecipe); 
      recipeList2.add(selectedRecipe); 
      adapter.notifyDataSetChanged(); 

    } 
    }); 
}; 
public void test_onClick(View view) { 
    Intent intent = new Intent(MainActivity.this, TestActivity.class); 
    startActivity(intent); 
} 
private ListView mListView; 
} 

2.Activity:

public class TestActivity extends AppCompatActivity { 
static ArrayList<Recipe> recipeList2 = new ArrayList<>(); 


    public void onCreate(Bundle savedInstanceState) { 
    ListView mListView; 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_test); 
    mListView = (ListView) findViewById(R.id.testlist2); 
    final RecipeAdapter adapter = new RecipeAdapter (this, recipeList2); 
    mListView.setAdapter(adapter); 
    final Context context = this; 
    mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Recipe selectedRecipe = recipeList2.get(position); 
      recipeList2.remove(selectedRecipe); 
      recipeList.add(selectedRecipe); 
      adapter.notifyDataSetChanged(); 
     }});} 
public void test2_onClick(View view) { 
    Intent intent = new Intent(TestActivity.this, MainActivity.class); 
    startActivity(intent); 
}} 

Recipe.class:

public static ArrayList<Recipe> getRecipesFromFile(String filename, Context context){ 
final ArrayList<Recipe> recipeList = new ArrayList<>(); 


try { 
    // Load data 
    String jsonString = loadJsonFromAsset("recipes.json", context); 
    JSONObject json = new JSONObject(jsonString); 
    JSONArray recipes = json.getJSONArray("recipes"); 

    // Get Recipe objects from data 
    for(int i = 0; i < recipes.length(); i++){ 
    Recipe recipe = new Recipe(); 

    recipe.title = recipes.getJSONObject(i).getString("title"); 


    recipeList.add(recipe); 
    } 
} catch (JSONException e) { 
    e.printStackTrace(); 
} 

return recipeList; } 
    private static String loadJsonFromAsset(String filename, Context context) { 
String json = null; 

try { 
    InputStream is = context.getAssets().open(filename); 
    int size = is.available(); 
    byte[] buffer = new byte[size]; 
    is.read(buffer); 
    is.close(); 
    json = new String(buffer, "UTF-8"); 
} 
catch (java.io.IOException ex) { 
    ex.printStackTrace(); 
    return null; 
} 

return json; 
    } 
} 
+0

リストを保存しようとするコードが表示されません...なぜそれが保存されると思いましたか?ファイルに返信する –

+0

私は自分のリストを保存する方法がわからないので分かります – GvrG

+0

ディスク上の 'File'オブジェクトを開いて書き込みます –

答えて

0

お近くのアプリ場合は、保存されていないデータが削除されます。 android activity lifecycleをご覧ください。アプリが終了すると、onDestroy()が呼び出されます。変更を保存する予定のアクティビティでは、onDestroy()メソッドをオーバーライドする必要があります。

関連する問題