繁体   English   中英

刷新ArrayList以使用Click on Spinner Item将新数据显示到RecyclerView中

[英]Refresh ArrayList to show new Data into RecyclerView using Click on Spinner Item

单击Spinner Item将新数据添加到RecyclerView而不删除旧数据。

就像,我在Spinner中two项目: AppliancesAccessories

默认情况下,我将Appliances数据显示在RecyclerView中 ,但每当我tap 配件时 - 它会将 Accessories data显示到RecyclerView中 ,但是below Appliances data ,而我只期望 Accessories数据进入RecyclerView

MainActivity.java:

public class MainActivity extends AppCompatActivity {

    .....

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu_screen);
        .........

        stringList = new ArrayList<String>();
        stringList.add("Appliances");
        stringList.add("Accessories");

        ArrayAdapter<String> stringArrayAdapter = new ArrayAdapter<String>(MainActivity.this,
                android.R.layout.simple_dropdown_item_1line,
                stringList);

        spinnerMenu.setAdapter(stringArrayAdapter);

        ......

        initializeAdapter();

        .....

        spinnerMenu.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

                switch (position) {
                    case 0:                            

                        presenter.loadAppliances();

                        break;

                    case 1:

                        presenter.loadAccessories();

                        break;
                }

            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

        .......
    }

    public void initializeAdapter() {

        categoryAdapter = new CategoryAdapter(this, new ArrayList<Category>());
        mRecyclerView.setAdapter(categoryAdapter);
    }

    public void addMenu(List<Category> posts) {
        categoryAdapter.addAllData(posts);
        categoryAdapter.notifyDataSetChanged();
    }

}

CategoryAdapter.java:

    @Override
    public int getItemCount() {
        return posts.size();
    }

    public void setPosts(List<Categories> posts) {
        this.posts = posts;
    }

    public void clearData() {
        posts.clear();
    }

    public void addAllData(List<Categories> posts) {
        this.posts.addAll(posts);
    }

}

首先清除旧的ArrayList,然后将数据添加到Arraylist中。

 public void addMenu(List<Category> posts) {
    categoryAdapter.addAllData(posts);
    categoryAdapter.notifyDataSetChanged();
}

public void addAllData(List<Categories> posts) {
    this.posts.clear();
    this.posts.addAll(posts);
}

选择项目时需要重置适配器。 试试这个:

 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
       initializeAdapter();
       //after this the switch case

我还建议你有办法知道微调菜单位置。 在第一个menupresenter.loadAppliances(); int positionSelected = 0;

然后在开关盒中,

switch position
   case: 0
     if(positionSelected != 0) {
         initializeAdapter();
         menupresenter.loadAppliances();
         positionSelected = 0;
     }...

   case: 1
     if(positionSelected != 1) {
         initializeAdapter();
         menupresenter.loadAccessories();
         positionSelected = 1;
     }...      

这将确保您不会不必要地重置recyclerView适配器。 就像显示appliaces数据和用户一样,在下拉列表中再次选择设备

暂无
暂无

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

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