Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如果更改微调器值,如何刷新新的Recyclerview数据?_Android_Android Recyclerview_Adapter - Fatal编程技术网

Android 如果更改微调器值,如何刷新新的Recyclerview数据?

Android 如果更改微调器值,如何刷新新的Recyclerview数据?,android,android-recyclerview,adapter,Android,Android Recyclerview,Adapter,基本上我有两个带一组值的微调器。当我更改微调器值时,Recyclerview将刷新并使用一组新数据进行更新。我被困在这里,欢迎任何帮助,提前谢谢 private String[] vocSpinner; private String[] popSpinner; private List<Standard> standardList = new ArrayList<>(); private RecyclerView recyclerView; private Standar

基本上我有两个带一组值的微调器。当我更改微调器值时,Recyclerview将刷新并使用一组新数据进行更新。我被困在这里,欢迎任何帮助,提前谢谢

private String[] vocSpinner;
private String[] popSpinner;
private List<Standard> standardList = new ArrayList<>();
private RecyclerView recyclerView;
private StandardsAdapter sAdapter;

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    getActivity().setTitle("Standard");

recyclerView = (RecyclerView) getActivity().findViewById(R.id.recyclerView);
sAdapter = new StandardsAdapter(standardList);
RecyclerView.LayoutManager mLayoutManager = new 
LinearLayoutManager(getActivity().getApplicationContext());
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(sAdapter);

this.vocSpinner = new String[]{
            "CDO/Diver/Gds/Fitness Spec", "Combat/Service"
    };

    this.popSpinner = new String[]{
            "NSmen", "Regular/NSF", "Pre-enlistee"
    };

Spinner v = (Spinner) getActivity().findViewById(R.id.spinner_Voc);
final Spinner p = (Spinner) getActivity().findViewById(R.id.spinner_PopGp);

ArrayAdapter<String> adapterV = new ArrayAdapter<String>(getActivity(),
            android.R.layout.simple_spinner_item, vocSpinner);
v.setAdapter(adapterV);

ArrayAdapter<String> adapterP = new ArrayAdapter<String>(getActivity(),
            android.R.layout.simple_spinner_item, popSpinner);
p.setAdapter(adapterP);

v.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
            switch (position) {
                case 0:
                    if (p.getSelectedItem().equals("NSmen")) {
                        addStandardToList("Gold", ">90pts");
                        addStandardToList("Silver", ">75pts");
                        // I need help here!!
                        sAdapter.notifyDataSetChanged();


                    } else if (p.getSelectedItem().equals("Regular/NSF")) {
                        addStandardToList("Gold", ">85pts");
                        sAdapter.notifyDataSetChanged();

                    } else if (p.getSelectedItem().equals("Pre-enlistee")) {                           
                    }
                    break;

                case 1:
                    if (p.getSelectedItem().equals("NSmen")) {
                    } else if (p.getSelectedItem().equals("Regular/NSF")) {
                    } else if (p.getSelectedItem().equals("Pre-enlistee")) {                       
                    }
                    break;
            }
        }

@Override
        public void onNothingSelected(AdapterView<?> parentView) {
        }
    });

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_standard, container, false);
    return view;
}

private void addStandardToList(String stdStan, String stdPts) {
    Standard standardObj = new Standard (stdStan, stdPts);
    standardList.add(standardObj);
    sAdapter.notifyDataSetChanged();
}
private String[]vocSpinner;
私有字符串[]popSpinner;
private List standardList=new ArrayList();
私人回收站;
私人标准接受器接受器接受器;
@凌驾
已创建视图上的公共void(视图,@Nullable Bundle savedInstanceState){
super.onViewCreated(视图,savedInstanceState);
getActivity().setTitle(“标准”);
recyclerView=(recyclerView)getActivity().findViewById(R.id.recyclerView);
sAdapter=新标准sAdapter(标准列表);
RecyclerView.LayoutManager mLayoutManager=新建
LinearLayoutManager(getActivity().getApplicationContext());
recyclerView.setLayoutManager(mLayoutManager);
setItemAnimator(新的DefaultItemAnimator());
recyclerView.setAdapter(sAdapter);
this.vocSpinner=新字符串[]{
“CDO/潜水员/Gds/体能规范”、“战斗/服务”
};
this.popSpinner=新字符串[]{
“NSmen”、“正规军/NSF”、“预备役军人”
};
微调器v=(微调器)getActivity().findViewById(R.id.Spinner\u Voc);
最终微调器p=(微调器)getActivity().findViewById(R.id.Spinner\u PopGp);
ArrayAdapter Adapter=新的ArrayAdapter(getActivity(),
android.R.layout.simple\u微调器\u项目,vocSpinner);
v、 setAdapter(adapterV);
ArrayAdapter adapterP=新的ArrayAdapter(getActivity(),
android.R.layout.simple\u微调器\u项目,popSpinner);
p、 setAdapter(adapterP);
v、 setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图selectedItemView、整型位置、长id){
开关(位置){
案例0:
if(p.getSelectedItem().equals(“NSmen”)){
addStandardToList(“黄金“>90分”);
addStandardToList(“银牌“>75分”);
//我需要帮助!!
sAdapter.notifyDataSetChanged();
}else if(p.getSelectedItem().equals(“常规/NSF”)){
addStandardToList(“黄金“>85分”);
sAdapter.notifyDataSetChanged();
}else如果(p.getSelectedItem().equals(“预登记对象”){
}
打破
案例1:
if(p.getSelectedItem().equals(“NSmen”)){
}else if(p.getSelectedItem().equals(“常规/NSF”)){
}else如果(p.getSelectedItem().equals(“预登记对象”){
}
打破
}
}
@凌驾
未选择公共无效(AdapterView父视图){
}
});
@可空
@凌驾
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment_标准,容器,假);
返回视图;
}
私有void addStandardToList(字符串stdStan、字符串stdPts){
Standard standardObj=新标准(标准差分扫描、标准差分扫描);
标准列表。添加(standardObj);
sAdapter.notifyDataSetChanged();
}

}@Ryan您的问题在于逻辑,而不是notifyAdapterDataSet。您所做的是使用不同的项目填充adapterV和adapterP,并且仅设置adapterV的itemSelectedListener。现在,在选定的侦听器中,您有一个if条件,if条件的值与您在adapterP中设置的值相关。因此,他们将永远不会在v中被选中。因此,问题就出现了。换行

v.setOnItemSelectedListener

然后更改p的值以查看选择是否有效,然后修改逻辑

更新1: 要根据注释清除列表,只需在on itemselected方法中添加standardList.clear()作为第一行,如下所示-

public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
        standardList.clear();
      switch (position) {
            case 0:
                //Your code here remains as it is now.
已选择公共视图(AdapterView父视图、View selectedItemView、int位置、长id){ standardList.clear(); 开关(位置){ 案例0: //这里的代码保持原样。
@Ryan您的问题主要是在逻辑中,而不是notifyAdapterDataSet。您所做的是用不同的项填充adapterV和adapterP,并且只设置adapterV的itemSelectedListener。现在在您选择的侦听器中,您有一个if条件,if条件的值与您在adapterP中设置的值相关。因此,它们将永远不能在v中选择uld。已选择因此问题。更改此行

v.setOnItemSelectedListener

然后更改p的值以查看选择是否有效,然后修改逻辑

更新1: 要根据注释清除列表,只需在on itemselected方法中添加standardList.clear()作为第一行,如下所示-

public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
        standardList.clear();
      switch (position) {
            case 0:
                //Your code here remains as it is now.
已选择公共视图(AdapterView父视图、View selectedItemView、int位置、长id){ standardList.clear(); 开关(位置){ 案例0: //这里的代码保持原样。
如果需要清除回收器视图并添加新值,则首先需要清除传递给适配器的arraylist中的值

standardList.clear();
然后,您必须通过调用

 addStandardToList("Gold", ">90pts");
sAdapter.notifyDataSetChanged();
然后,您必须通过调用请求适配器刷新回收器视图上的数据

 addStandardToList("Gold", ">90pts");
sAdapter.notifyDataSetChanged();

如果需要清除recycler视图并添加新值,则首先需要清除传递给适配器的arraylist中的值

standardList.clear();
然后,您必须通过调用

 addStandardToList("Gold", ">90pts");
sAdapter.notifyDataSetChanged();
然后,您必须通过调用请求适配器刷新回收器视图上的数据

 addStandardToList("Gold", ">90pts");
sAdapter.notifyDataSetChanged();

使用adapter.notifyDataSetChanged();method@NileshRathod正确。在适配器中添加新数据后,使用SpinGenerator的侦听器中的方法只需调用adapter.notifyDataSetChange