繁体   English   中英

RecyclerView在更改项目时单击

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM