私は上にedittextを持っています&以下はrecyclerviewのリストです。私は最初にedittextを使用してリスト&をフィルタリングし、次にリストから特定の項目を選択する際には、単にアプリケーション上のプリント/トーストを選択します。recyclerviewリストの間違った項目を取得するフィルタリングと選択
私の問題は、私はリストから特定のアイテムを選択するとリストをフィルタリングすることができますが、間違ったアイテム名はフィルタリングの代わりに元のリストから取得することを意味します。
以下は、私が問題はここintent.putExtra("Name", nameList.get(position).getName());
あなたは、元のリストのアイテムを取得すると思いフラグメント
onCreateView() {
recyclerView.addOnItemTouchListener(new RecyclerItemClickListener(context,
new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
// TODO Handle item click
// Send the event to the host activity
Intent intent = new Intent();
intent.putExtra("Name", nameList.get(position).getName());
getTargetFragment().onActivityResult(
getTargetRequestCode(), 101, intent);
dismiss();
}
})
);
addTextListener();
}
public void addTextListener(){
editTextSearch.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
public void onTextChanged(CharSequence query, int start, int before, int count) {
adapter.getFilter().filter(query.toString().toLowerCase());
}
});
}
マイアダプタクラスコード
public class NameListAdapter extends RecyclerView.Adapter<NameListAdapter.DataObjectHolder>
implements Filterable {
private ArrayList<NameDetail> originalNameDetailArrayList;
private List<NameDetail> filterNameDetailList;
private Context mContext = null;
private ValueFilter valueFilter;
@Override
public NameListAdapter.DataObjectHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.sd_custom_cardview_for_name_list_item, parent, false);
DataObjectHolder dataObjectHolder = new DataObjectHolder(view);
return dataObjectHolder;
}
@Override
public Filter getFilter() {
if (valueFilter == null) {
valueFilter = new ValueFilter();
}
return valueFilter;
}
public class DataObjectHolder extends RecyclerView.ViewHolder {
TextView textViewName;
ImageView image;
public DataObjectHolder(View itemView) {
super(itemView);
mContext = itemView.getContext();
textViewName = (TextView)itemView.findViewById(R.id.textView_Name);
}
}
public NameListAdapter(Context context, ArrayList<NameDetail> originalNameDetailArrayList) {
this.mContext = context;
this.originalNameDetailArrayList = originalNameDetailArrayList;
this.filterNameDetailList = originalNameDetailArrayList;
}
@Override
public void onBindViewHolder(final NameListAdapter.DataObjectHolder holder, int position) {
holder.textViewName.setText(originalNameDetailArrayList.get(position).getName());
}
@Override
public int getItemCount() {
return originalNameDetailArrayList.size();
}
private class ValueFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if (constraint != null && constraint.length() > 0) {
ArrayList<NameDetail> filterList = new ArrayList<NameDetail>();
for (int i = 0; i < filterNameDetailList.size(); i++) {
if ((filterNameDetailList.get(i).getName().toUpperCase())
.contains(constraint.toString().toUpperCase())) {
NameDetail listItem = new RegionDetail();
listItem.setID(filterNameDetailList.get(i).getID());
listItem.setName(filterNameDetailList.get(i).getName());
filterList.add(listItem);
}
}
results.count = filterList.size();
results.values = filterList;
} else {
results.count = filterNameDetailList.size();
results.values = filterNameDetailList;
}
return results;
}
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
originalNameDetailArrayList = (ArrayList<NameDetail>) results.values;
notifyDataSetChanged();
Log.v("Size", " : " + originalNameDetailArrayList.size());
if (originalNameDetailArrayList.size() == 0) {
new GlobalToast().showToastMessage(mContext, mContext.getResources().getString(R.string.no_records_found));
}
}
}
}
[この回答](http://stackoverflow.com/questions/24885223/why-doesnt-recyclerview-have-onitemclicklistener-and-how-recyclerview-is-dif)を参照してください。 –
@SelçukCihan方法を変更する代わりに、フィルタリングされたアイテムを取得する別の方法が必要です。 – VVB
これに代わる方法として、 'onCreateViewHolder'の中で個々の行にリスナーを設定することができます。 –