android Spinner需要2次点击才能工作



我试图在片段中使用微调器来对我的回收器视图的输出进行分类

当我从onCreateView调用回收器视图函数时,它可以完美地工作。但是,当我从微调器函数调用它时,它需要单击2次才能显示。

这是微调器XML代码:

<Spinner
android:id="@+id/med_spinner"
android:layout_width="150dp"
android:layout_height="30dp"
android:layout_below="@+id/tv_med2"
android:layout_marginLeft="15dp"
android:layout_marginTop="20dp"
android:layout_toRightOf="@id/tv_spinner"
android:dropDownWidth="match_parent"
android:focusable="true"
android:gravity="center"
android:entries="@array/medicine"
/>

这是片段:

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.frag_medicine, container, false);
RecyclerView rv_med = view.findViewById(R.id.rv_medicine);
db = new UserDB(getActivity());
med_name = new ArrayList<>();
med_type = new ArrayList<>();
med_type2 = new ArrayList<>();


//spinner declartion
spinner = view.findViewById(R.id.med_spinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(), R.array.medicine, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(this);

//recycler view adapter and layout manger
recyclerViewAdapter = new RecyclerViewAdapterMedicine(getContext(), med_name, med_type, med_type2);
rv_med.setAdapter(recyclerViewAdapter);
rv_med.setLayoutManager(new LinearLayoutManager(getContext()));
return view;
}

这是旋转器功能

@Override
public void onItemSelected(AdapterView<?> parent, View view, int i, long l) {
med_name.clear();
med_type.clear();
med_type2.clear();
cata = spinner.getSelectedItem().toString();
display(cata);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
cata = "All";
display(cata);
}

这是显示功能:

void display(String type) {
db.open();
Cursor cursor = db.listMedicine();
if (cursor.getCount() == 0) {
Toast.makeText(getActivity(), "an error occurred", Toast.LENGTH_LONG).show();
} else {
if (type.equals("All")){
while (cursor.moveToNext()) {
med_name.add(cursor.getString(1));
med_type.add(cursor.getString(2));
med_type2.add(cursor.getString(3));
}
}else{
while (cursor.moveToNext()) {
if(cursor.getString(2).equals(type) || cursor.getString(3).equals(type)) {
med_name.add(cursor.getString(1));
med_type.add(cursor.getString(2));
med_type2.add(cursor.getString(3));
}

}
}
db.close();
}
}

我试着把微调器函数放在一个微调器中。onItemSelectedListener在片段内外,我试着启用和禁用焦点和focusableTochMode,我还试着在片段中的微调器之前调用回收器视图。

您需要通知RecyclerViewAdapter数据已更改。添加

recyclerViewAdapter.notifyDataSetChanged()

在CCD_ 2结束时。

最新更新