我正在嘗試在片段中使用微調器對回收器視圖的輸出進行分類
當我從 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();
}
}
我嘗試將微調器函式放在片段內部和外部的 spinner.onItemSelectedListener 中,我嘗試啟用和禁用焦點和 focusableTochMode,我還嘗試在片段中的微調器之前呼叫回收器視圖。
uj5u.com熱心網友回復:
您需要通知您的RecyclerViewAdapter資料已更改。添加
recyclerViewAdapter.notifyDataSetChanged()
在你的display.
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/372856.html
