切换活动后保存ArrayList数据

时间:2017-06-25 18:02:27

标签: java android arraylist sharedpreferences

我在两个活动中有两个ArrayLists。第一个ArrayList包含大约1000个项目(保存在JSON文件中),第二个ArrayList包含0个项目。

可以使用" onClick"

将1个项目添加到ArrayList2

但是当我关闭App时,活动不会保存。

如何保存这些更改?

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

1 个答案:

答案 0 :(得分:0)

如果您关闭应用,则会删除未保存的数据。看看android activity lifecycle。关闭应用后,系统会调用onDestroy()。您应该在活动中覆盖onDestroy()方法,该方法应该保存更改。