簡體   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