![](/img/trans.png)
[英]Update recyclerview single row data when spinner item data is changed
[英]RecyclerView click when item is changed
在我的RecyclerView中,searchview中有一个过滤器数据。 单击某个项是在ViewHolder中实现的。现在,我希望通过界面来实现OnItemClickListener,并且一切正常,直到排序时对项的顺序进行了排序,例如,搜索第20个位置时,它将变成第一个,并被视为第一个。 5位置变为1,但处理为1。在这种情况下,如何正确绑定ID?
Snachala Bylo Tak
起初是这样的:
ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView name;
StationViewHolder(View v) {
super(v);
v.setOnClickListener(this);
name = v.findViewById(R.id.name);
}
@Override
public void onClick(View v) {
Context context = v.getContext();
Activity activity = (Activity) context;
Intent i;
i = new Intent(context, DetailStation.class);
i.putExtra("pos1",listStations.get(getAdapterPosition()).getName());
context.startActivity(i);
并捕获了一个事件:
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
position = bundle.getString("pos1");
}
bus3_txt_2.setText(position2);
现在该怎么办?
我这样做:searchView。 片段本身。 如果它不起作用,则输出带有铭文的视图文本-未找到数据
这是我的片段
// is my fragment
public class MyFragment
extends Fragment
implements SearchView.OnQueryTextListener
//
//фрагепмнт
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
menu.clear();
inflater.inflate(R.menu.menu_items, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
searchView = (SearchView) searchItem.getActionView();
searchView.setOnQueryTextListener(this);
}
@Override
public boolean onQueryTextSubmit(String query) {
searchView.clearFocus();
return false;
}
private List<ItemListStation>
filter(List<ItemListStation> models, String query) {
query = query.toLowerCase();
final List<ItemListStation> filteredModelList = new ArrayList<>();
for (ItemListStation model : models) {
final String text;
text = model.getName().toLowerCase();
if (text.contains(query)) {
filteredModelList.add(model);
}
}
return filteredModelList;
}
@Override
public boolean onQueryTextChange(String newText) {
final List<ItemListStation> filteredModelList = filter(listStationItemList, newText);
adapter.setFilter(filteredModelList);
textViewSearch.setVisibility(View.GONE);
if (filteredModelList.isEmpty()) {
View myView = textViewSearch;
slideToBottom(myView);
}
return true;
}
public void slideToBottom(View view){
Animation shake = AnimationUtils.loadAnimation(getActivity(), R.anim.shake);
if (view.getVisibility() == View.GONE) {
view.setVisibility(View.VISIBLE);
view.startAnimation(shake);
}
}
这是我的适配器
class Bus2Adapter extends RecyclerView.Adapter<Bus2Adapter.StationViewHolder> {
private List<ItemBusStation> listStations;
Bus2Adapter(List<ItemBusStation> listStations) {
this.listStations = listStations; }
@Override
public StationViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view =
LayoutInflater.from(parent.getContext()).
inflate(R.layout.item_bus_station, parent, false);
return new StationViewHolder(view);
}
@Override
public int getItemViewType(int position) {
return position; }
@Override
public void onBindViewHolder(StationViewHolder holder, int position) {
holder.name.setText(listStations.get(position).getName());
}
@Override
public int getItemCount() {
return listStations.size();
}
class StationViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView name;
StationViewHolder(View v) {
super(v);
v.setOnClickListener(this);
name = v.findViewById(R.id.name);
}
@Override
public void onClick(View v) {
Context context = v.getContext();
Activity activity = (Activity) context;
Intent i;
i = new Intent(context, DetailStation.class);
i.putExtra("pos1", listStations.get(getAdapterPosition()).getName());
context.startActivity(i);
}
}
public void setFilter(List<ItemBusStation> listStationLists) {
listStations = new ArrayList<>();
listStations.addAll(listStationLists);
notifyDataSetChanged(); }
}
这是我的物品
ItemBusStation implements Serializable {
private String name;
public ItemBusStation(String name) {
this.name = name;
}
public String getName() {
return name;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.