Java 如何保存已选中的listview项
我正在使用一个列表视图来显示带有选中标记的杂货项目,使用android.R.layout.simple\u list\u item\u checked。问题是当我检查一个项目并转到上一页并返回到列表时,我的项目不再被检查..我想使用除SharedReference之外的其他内容这是可能的,我该如何做 我尝试使用SparseBooleanArray,但它不起作用,我可能用错了。 由于我使用了上一个电话按钮,并且在单击调用列表活动的按钮后,我应该在onCreate方法中使用一些东西,但我不确定是什么以及如何使用 我也尝试使用oninstanceResore方法,就像一些人建议我的那样,但我没有细化我正在寻找的内容,比如说我在活动2上,这是我的项目列表,选中了一些项目。我决定返回,使用“手机上一步”按钮执行其他操作,然后使用我应用程序中的按钮返回活动2……我希望我的项目保持不变检查一下。有人能帮我做这件事吗我将非常感激Java 如何保存已选中的listview项,java,android,android-studio,Java,Android,Android Studio,我正在使用一个列表视图来显示带有选中标记的杂货项目,使用android.R.layout.simple\u list\u item\u checked。问题是当我检查一个项目并转到上一页并返回到列表时,我的项目不再被检查..我想使用除SharedReference之外的其他内容这是可能的,我该如何做 我尝试使用SparseBooleanArray,但它不起作用,我可能用错了。 由于我使用了上一个电话按钮,并且在单击调用列表活动的按钮后,我应该在onCreate方法中使用一些东西,但我不确定是什么
public class FruitList_Activity extends AppCompatActivity {
private ListView fruitsList;
private ArrayAdapter<String> adapterFruit;
private Button btn_Delete;
private Button btn_SelectAll;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_fruit_list_);
fruitsList = findViewById(R.id.list_Fruits);
fruitsList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
btn_Delete = findViewById (R.id.btn_delete);
CreateActivity.itemsFruit = FileHelper.readData(this);
adapterFruit = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_checked, CreateActivity.itemsFruit);
fruitsList.setAdapter(adapterFruit);
/*Remove items*/
btn_Delete.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
SparseBooleanArray checkedItemPositions = fruitsList.getCheckedItemPositions();
int itemCount = fruitsList.getCount();
for(int i=itemCount-1; i >= 0; i--){
if(checkedItemPositions.get(i)){
fruitsList.setItemChecked(i,true);
adapterFruit.remove(CreateActivity.itemsFruit.get(i));
FileHelper.writeData(CreateActivity.itemsFruit, FruitList_Activity.this );
}
}
adapterFruit.notifyDataSetChanged();
}
});
}
}
公共类水果列表\u活动扩展了AppCompatActivity{
私有列表视图水果列表;
私有阵列适配器果实;
私人按钮btn_删除;
专用按钮btn\u选择全部;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u fruit\u list\u);
水果列表=findViewById(R.id.list\u水果);
水果列表.setChoiceMode(列表视图.CHOICE\u模式\u多重);
btn_Delete=findviewbyd(R.id.btn_Delete);
CreateActivity.itemsFruit=FileHelper.readData(此);
adapterFruit=new ArrayAdapter(此,android.R.layout.simple_list_item_选中,CreateActivity.itemsFruit);
果实列表;果实接受器(接受器果实);
/*删除项目*/
btn_Delete.setOnClickListener(新视图.OnClickListener()
{
公共void onClick(视图v)
{
SparseBooleanArray checkedItemPositions=水果列表。getCheckedItemPositions();
int itemCount=fruitsList.getCount();
对于(int i=itemCount-1;i>=0;i--){
if(checkedItemPositions.get(i)){
水果列表。setItemChecked(i,true);
adapterFruit.remove(CreateActivity.itemsFruit.get(i));
FileHelper.writeData(CreateActivity.itemsFruit,水果列表\活动.this);
}
}
adapterFruit.notifyDataSetChanged();
}
});
}
}
你能指导我如何做到这一点吗?我刚刚开始学习java,请解释一下,以便我能理解。谢谢 您需要使用列表信息创建一个Bundle,在调用第二个活动之前,您将在该Bundle中设置数据,当您返回到主活动时,只需检查Bundle,如果在null处不同,则是因为您需要加载数据 我希望这个cal能帮助你:D 这是已保存的实例()
此外,当您有OnConfiguration Changed()时,此cal将帮助您创建一个包含列表信息的捆绑包,在调用第二个活动之前,您将在该捆绑包中设置数据,当您返回到主活动时,只需检查捆绑包,如果在null处不同,则是因为您需要加载数据 我希望这个cal能帮助你:D 这是已保存的实例()
此外,当您有OnConfiguration Changed()时,此cal将帮助您使用onSaveInstanceState保存适配器果实
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("adapter",(Serializable) adapterFruit);
}
返回活动时,将执行onRestoreInstance
@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
if(saveInstanceState != null){
adapterFruit = (ArrayAdapter<Adapter> )savedInstanceState.getSerializable("adapter");
}
}
@凌驾
RestoreInstanceState(@NonNull Bundle savedInstanceState)上的受保护无效{
super.onRestoreInstanceState(savedInstanceState);
if(saveInstanceState!=null){
adapterFruit=(ArrayAdapter)savedInstanceState.getSerializable(“适配器”);
}
}
希望有帮助。使用onSaveInstanceState保存适配器果实
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("adapter",(Serializable) adapterFruit);
}
返回活动时,将执行onRestoreInstance
@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
if(saveInstanceState != null){
adapterFruit = (ArrayAdapter<Adapter> )savedInstanceState.getSerializable("adapter");
}
}
@凌驾
RestoreInstanceState(@NonNull Bundle savedInstanceState)上的受保护无效{
super.onRestoreInstanceState(savedInstanceState);
if(saveInstanceState!=null){
adapterFruit=(ArrayAdapter)savedInstanceState.getSerializable(“适配器”);
}
}
希望有帮助。你可以这样做
holder.checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(holder.checkBox.isChecked()==true) {
holder.checkBox.setChecked(true);
model_image.get(position).setSelected(true);
}
else
{
holder.checkBox.setChecked(false);
model_image.get(position).setSelected(false);
}
}
});
你可以这样做
holder.checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(holder.checkBox.isChecked()==true) {
holder.checkBox.setChecked(true);
model_image.get(position).setSelected(true);
}
else
{
holder.checkBox.setChecked(false);
model_image.get(position).setSelected(false);
}
}
});
我将2方法放入类中,但当我测试它时,它似乎不起作用。检查了两个项目,按下手机上的“上一步”按钮,当我回来时,这些项目不再检查。saveinstance方法在什么时候被调用?我读到有关saveinstance的内容,当你单击“上一步”或更改方向时,它似乎会触发你的手机,所以它会有意义。所以他们一定是我缺少的东西…我得到一个错误,无法解决saveInstanceState上的if语句上的符号。知道为什么吗?我把2方法放在类中,但当我测试它时,它似乎不起作用检查两个项目,按下手机上的“上一个”按钮,当我回来时,这些项目没有再次检查。saveinstance方法是在什么时候调用的?我读到了关于saveinstance的内容,当您单击“上一步”或更改手机的方向使其能够感知时,它似乎会触发。因此,它们一定是我缺少的东西…我收到一个错误,无法解析saveinstance上if语句的符号。请说明原因?您的解决方案只有在单击后才能工作。他需要当他回到活动中时,您可以使用SQLITE使用SQL似乎有点过火,我会看看如何使用onSaveInstanceState和onRestoreInstanceState。无论如何,您的解决方案只有在单击后才能起作用。他需要当他回到活动中时,你可以使用SQLITE使用SQL似乎有点过分,我会看看我能做些什么