2016-04-29 47 views
4

单击Spinner将新数据添加到RecyclerView而不删除旧数据的项目。刷新ArrayList以使用单击微调器向RecyclerView显示新数据项目

一样,我有一个微调two项目:AppliancesAccessories

默认情况下,我显示Appliances数据为RecyclerView,但每当我做tap配件 - 这正显示出Accessories dataRecyclerView,但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); 
    } 

} 
+0

为什么它被低估?我不认为这是我发布的错误。 – Sophie

+2

嘿在调用'menuPresenter.loadAppliances();'之后清空你的列表'并且在调用'notifyDataSetChanged()' –

+0

尝试过但得到空指针异常 – Sophie

回答

1

首先清除旧的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); 
} 
0

您需要的时候选择了一个项目复位适配器。所以试试这个:

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数据和用户一样,在下拉菜单中再次选择设备