Java 为Android保存setOnItemClickListener数据

Java 为Android保存setOnItemClickListener数据,java,android,listview,Java,Android,Listview,我创建了一个listview,允许用户在列表中勾选他们看过的电影。唯一的问题是,当我更改活动或关闭应用程序时,它会将listview中的所有元素重置为默认值。我想知道是否有办法使用我当前的代码保存这些更改 public class Movies extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceSta

我创建了一个listview,允许用户在列表中勾选他们看过的电影。唯一的问题是,当我更改活动或关闭应用程序时,它会将listview中的所有元素重置为默认值。我想知道是否有办法使用我当前的代码保存这些更改

public class Movies extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_movies);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    ListView moviesListView = (ListView)findViewById(R.id.moviesListView);

    final ArrayList<String> topMovies = new ArrayList<String>(asList("The Shawshank Redemption", "The Godfather", "The Godfather: Part 2",
            "The Dark Knight", "Pulp Fiction","Schlinder's List","12 Angry Men","The Lord of the Rings: The Return of the King",
            "The Good, the Bad and the Ugly","Fight Club","The Lord of the Rings: The Fellowship of the Ring","Star Wars: Episode V - The Empire Strikes Back",
            "Forrest Gump","Inception","One Flew Over the Cuckoo's Nest","The Lord of the Rings: The Two Towers","Goodfellas",
            "The Matrix","Seven Samurai","Star Wars: Episode IV - A New Hope","City of God","Se7en","The Silence of the Lambs",
            "The Usual Suspects","It's a Wonderful Life","Life is Beautiful","Leon: The Professional","Once Upon a Time in the West",
            "Spirited Away","Interstellar","Saving Private Ryan","Casablanca","American History X","Psycho","City Lights","Raiders of the Lost Ark",
            "Rear Window","The Intouchables","Modern Times","The Green Mile","Terminator 2: Judgement Day","The Pianist","The Departed",
            "Whiplash","Back to the Future","Memento","Gladiator","Apocolypse Now","Dr. Strangelove","The Prestige"));

    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, topMovies);

    moviesListView.setAdapter(arrayAdapter);

    final MediaPlayer mPlayer = MediaPlayer.create(this,R.raw.pindrop);

    moviesListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            if(view.getAlpha()==1f) {

                mPlayer.start();
                Toast.makeText(getApplicationContext(), "You Watched " + topMovies.get(position), Toast.LENGTH_LONG).show();
                view.animate().alpha(0.2f);
            }

            else{

                view.animate().alpha(1f);

            }
        }
    });
}

}
公共类电影扩展了AppCompative活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_电影);
Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
设置支持操作栏(工具栏);
ListView moviesListView=(ListView)findViewById(R.id.moviesListView);
最终ArrayList topMovies=新ArrayList(asList(“肖申克的救赎”、“教父”、“教父:第2部分”),
“黑暗骑士”、“低俗小说”、“施林德名单”、“12个愤怒的男人”、“指环王:国王的回归”,
“善、恶、丑”、“搏击俱乐部”、“指环王:指环团契”、“星球大战:第五集-帝国反击”,
《阿甘正传》,《盗梦空间》,《飞越布谷鸟巢》,《指环王:双塔》,《好家伙》,
《黑客帝国》,《七武士》,《星球大战:第四集-新希望》,《上帝之城》,《Se7en》,《沉默的羔羊》,
“通常的怀疑”,“这是一个美好的生活”,“生活是美好的”,“利昂:专业人士”,“曾经在西方”,
“幽灵之旅”、“星际”、“拯救大兵瑞恩”、“卡萨布兰卡”、“美国历史X”、“精神病”、“城市之光”、“迷失方舟掠夺者”,
《后窗》,《不可触摸的人》,《现代》,《绿英里》,《终结者2:审判日》,《钢琴家》,《逝者》,
“鞭笞”、“回到未来”、“纪念品”、“角斗士”、“现在的Apocolypse”、“奇爱博士”、“威望”);
ArrayAdapter ArrayAdapter=新的ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,topMovies);
setAdapter(arrayAdapter);
final MediaPlayer=MediaPlayer.create(this,R.raw.pindrop);
moviesListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
if(view.getAlpha()==1f){
mPlayer.start();
Toast.makeText(getApplicationContext(),“您观看了”+topMovies.get(position),Toast.LENGTH_LONG.show();
view.animate().alpha(0.2f);
}
否则{
view.animate().alpha(1f);
}
}
});
}
}

您的电影阵列列表是要更改还是静态?如果列表发生更改或列表项被删除,会发生什么情况。在android开发培训中,共享偏好中有太多的元素是不受欢迎的。SQLite3数据库是最好的方法。

您需要将这些更改保存在某个地方(通常在数据库中),以跟踪电影是否标记为已观看。在android上保存数据的最简单方法是使用SharedReferences。但是,如果您对数据库有一些了解,可以使用SQLite。这里有一些链接让你们开始:谢谢大家。共享首选项是否能够保存listview中的所有50行?谢谢。一切都将保持不变。考虑到元素中唯一变化的是alpha,是否可以将这些变化存储在SQLlite中?是的,定义一个包含要存储的信息的列的表是相当容易的。从那张桌子上读起来也相当容易。