Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何保存已选中的listview项_Java_Android_Android Studio - Fatal编程技术网

Java 如何保存已选中的listview项

Java 如何保存已选中的listview项,java,android,android-studio,Java,Android,Android Studio,我正在使用一个列表视图来显示带有选中标记的杂货项目,使用android.R.layout.simple\u list\u item\u checked。问题是当我检查一个项目并转到上一页并返回到列表时,我的项目不再被检查..我想使用除SharedReference之外的其他内容这是可能的,我该如何做 我尝试使用SparseBooleanArray,但它不起作用,我可能用错了。 由于我使用了上一个电话按钮,并且在单击调用列表活动的按钮后,我应该在onCreate方法中使用一些东西,但我不确定是什么

我正在使用一个列表视图来显示带有选中标记的杂货项目,使用android.R.layout.simple\u list\u item\u checked。问题是当我检查一个项目并转到上一页并返回到列表时,我的项目不再被检查..我想使用除SharedReference之外的其他内容这是可能的,我该如何做

我尝试使用SparseBooleanArray,但它不起作用,我可能用错了。 由于我使用了上一个电话按钮,并且在单击调用列表活动的按钮后,我应该在onCreate方法中使用一些东西,但我不确定是什么以及如何使用

我也尝试使用oninstanceResore方法,就像一些人建议我的那样,但我没有细化我正在寻找的内容,比如说我在活动2上,这是我的项目列表,选中了一些项目。我决定返回,使用“手机上一步”按钮执行其他操作,然后使用我应用程序中的按钮返回活动2……我希望我的项目保持不变检查一下。有人能帮我做这件事吗我将非常感激

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似乎有点过分,我会看看我能做些什么