繁体   English   中英

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

[英]How to save listview item checked

我正在使用Listview使用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入手,所以请向我解释,以便我理解。 谢谢!

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

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

这是保存的Instance()

同样,当您拥有onConfigurationChanged()时,此校准也会为您提供帮助

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

    }

希望能帮助到你。

你可以这样

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

                }
            }
        });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM