아래에 edittext가 있습니다. &는 recyclerview에있는 목록입니다. 먼저 편집 목록을 사용하여 목록 &을 필터링 한 다음 목록에서 특정 항목을 선택하면 응용 프로그램에서 인쇄/토스트합니다.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 내에 각 행에 리스너를 설정할 수 있습니다. –