如何保存选中的列表视图项

时间:2019-07-25 01:55:49

标签: java android android-studio

我正在使用列表视图显示带有android.R.layout.simple_list_item_checked选中标记的杂货项目。问题是当我检查项目并转到上一页并返回列表时,我的项目不再受检查了。我想使用除sharedpreference之外的其他方法,我该怎么做?

我尝试使用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();

            }
        });



    }
}

您能指导我如何做到这一点吗?我只是从Java入手,所以请向我解释,以便我理解。谢谢!

3 个答案:

答案 0 :(得分:0)

您需要使用列表信息创建一个Bundle,并在调用第二个活动之前,将数据设置在该Bundle中,当您回到主活动时,只需检查该Bundle,如果它与其他活动不同为空是因为您需要加载数据。

我希望这个校准对您有帮助:D

这已保存Instance()

此外,当您具有onConfigurationChanged()

时,此校准将为您提供帮助

答案 1 :(得分:0)

使用onSaveInstanceState保存您的adapterFruit

    @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");
        }

    }

希望有帮助。

答案 2 :(得分:-1)

你可以这样做

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

                }
            }
        });