私は編集テキストとリサイクラビューを持っていますが、編集テキストの目的は入力をリストのフィルタとして使用することです。ここに私のコードは次のとおりです。Recyclerビューがフィルタでリフレッシュされない - ArrayAdapter
フラグメント:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.frag_trains_view, container, false);
mountain.customwidgets.MontserratRegularAutoComplete editStationSearch =
(mountain.customwidgets.MontserratRegularAutoComplete)
view.findViewById(R.id.autoCompleteSource);
editStationSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
mAdapter.getFilter().filter(s);
}
});
RecyclerView mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
CsvReaderImpl csvReader = new CsvReaderImpl();
stationNameCodePojoArrayList = csvReader.ReadFromfile("data/stations.txt", getActivity());
mAdapter = new StationsRecyclerAdapter(getActivity(),stationNameCodePojoArrayList);
mRecyclerView.setAdapter(mAdapter);
LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), LinearLayoutManager.VERTICAL) {
@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
// Do not draw the divider
}
});
return view;
}
ここでは私のアダプタクラスです:
public class StationsRecyclerAdapter extends RecyclerView.Adapter<StationsRecyclerAdapter.DataObjectHolder> implements Filterable {
private ArrayList<StationPojo> mDataset;
private StationTextFilter stationTextFilter;
private Context ctx;
public StationsRecyclerAdapter(Context ctx, ArrayList<StationPojo> myDataset) {
this.mDataset = (new ArrayList<>(myDataset));
this.ctx = ctx;
for (int i = 0; i < mDataset.size(); i++) {
System.out.println("mDatasset Original: " + Arrays.asList(mDataset.get(i).getStationName()));
}
}
@Override
public Filter getFilter() {
if (stationTextFilter == null) {
stationTextFilter = new StationTextFilter(this, mDataset);
}
return stationTextFilter;
}
@Override
public DataObjectHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View mView = LayoutInflater.from(ctx).inflate(R.layout.row_auto_complete, parent, false);
return new DataObjectHolder(mView);
}
public static class DataObjectHolder extends RecyclerView.ViewHolder {
TextView stationName;
TextView stationCode;
TextView stationElevation;
public DataObjectHolder(View itemView) {
super(itemView);
stationName = (TextView) itemView.findViewById(R.id.textStationName);
stationCode = (TextView) itemView.findViewById(R.id.textStationCode);
stationElevation = (TextView) itemView.findViewById(R.id.textStationElevation);
}
}
@Override
public void onBindViewHolder(DataObjectHolder holder, int position) {
holder.stationCode.setText(mDataset.get(position).getStationCode());
holder.stationElevation.setText(mDataset.get(position).getStationElevation());
holder.stationName.setText(mDataset.get(position).getStationName());
}
@Override
public int getItemCount() {
return mDataset.size();
}
@Override
public int getItemViewType(int position) {
return super.getItemViewType(position);
}
@Override
public long getItemId(int position) {
return position;
}
}
そしてここでは、Filterクラスです:
私はかなり確信しています私はフィルタリングされた結果を印刷することができるので、事はmDataset.addAll((ArrayList<StationPojo>) filterResults.values);
までうまく動作します。何とか私はなぜnotifyDを知ることができませんatasetChangedは機能しません!どんな見出し?
基底クラスとして[この(https://gist.github.com/pskink/cd3bbdd742b5b1905a790c76831b5d85)を使用し、その 'マッチ() 'メソッドは、このようなオーバーライド:'クラスAが延びるMatchableRVArrayAdapter {... ' –
pskink
あなたが投稿したコードを調べる必要があります。間違いなくそれに従います! – User3