Java getAdapterPosition没有执行它应该执行的操作
我有一个Java getAdapterPosition没有执行它应该执行的操作,java,android,filter,android-recyclerview,Java,Android,Filter,Android Recyclerview,我有一个RecyclerView片段,在编辑文本中添加了一个过滤器搜索。它是有效的,但当我点击回收商的卡片时,它进入了错误的细节。我最好的猜测是它从getAdapterPosition中得到了错误的位置,因为假设我有这个列表{a,b,c,d,e,f,g,h}。当我过滤并得到两个像{d,g}一样的itmes时。如果我单击d,它将重定向到a,如果我单击g,它将重定向到b 这是我的回收视图 public class RecyclerProfile extends Fragment implem
RecyclerView
片段,在编辑文本中添加了一个过滤器搜索。它是有效的,但当我点击回收商的卡片时,它进入了错误的细节。我最好的猜测是它从getAdapterPosition
中得到了错误的位置,因为假设我有这个列表{a,b,c,d,e,f,g,h}。当我过滤并得到两个像{d,g}一样的itmes时。如果我单击d,它将重定向到a,如果我单击g,它将重定向到b
这是我的回收视图
public class RecyclerProfile extends Fragment implements
Adapter.AdapterListener, com.example.cake.profiling.Adapter.SearchListener
{
private RecyclerListener recyclerListener;
private List<Profile> profiles = (new DAOProfile()).getProfile();
private Adapter recyclerAdapter= new Adapter(profiles, this);
public RecyclerProfile() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view= inflater.inflate(R.layout.fragment_recycler_profile,
container, false);
RecyclerView recyclerView = view.findViewById(R.id.recyclerProfile);
EditText editText = view.findViewById(R.id.editText);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int
count) {
}
@Override
public void afterTextChanged(Editable s) {
filter(s.toString());
}
});
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new
LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(recyclerAdapter);
setHasOptionsMenu(true);
return view;
}
private void filter(String text){
ArrayList<Profile> filteredList = new ArrayList<>();
for (Profile profile: profiles){
if (profile.getName().toLowerCase().contains(text.toLowerCase())){
filteredList.add(profile);
}
}
recyclerAdapter.filterList(filteredList);
profiles = new ArrayList<>(filteredList);
}
@Override
public void listen(Profile profile, Integer position) {
recyclerListener.send(profile, position);
}
@Override
public void profileSelected(Profile profile) {
}
//INTERFACE
public interface RecyclerListener {
void send(Profile profile, Integer position);
}
//ON ATTACH
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.recyclerListener = (RecyclerListener) context;
}
}
公共类RecyclerProfile扩展了片段实现
Adapter.AdapterListener,com.example.cake.profiling.Adapter.SearchListener
{
私人垃圾回收站;
私有列表配置文件=(新DAOProfile()).getProfile();
专用适配器recyclerAdapter=新适配器(配置文件,此);
公共回收公司(){
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图=充气机。充气(R.layout.fragment\u recycler\u profile,
货柜(虚假);;
RecyclerView RecyclerView=view.findViewById(R.id.recyclerProfile);
EditText EditText=view.findviewbyd(R.id.EditText);
editText.addTextChangedListener(新的TextWatcher(){
@凌驾
更改前的公共无效(字符序列、整数开始、整数计数、,
整数后){
}
@凌驾
public void onTextChanged(字符序列,int start,int before,int
计数){
}
@凌驾
公共无效后文本已更改(可编辑){
过滤器(s.toString());
}
});
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager LayoutManager=新建
LinearLayoutManager(getContext(),LinearLayoutManager.VERTICAL,false);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(recyclerAdapter);
设置选项菜单(真);
返回视图;
}
专用无效过滤器(字符串文本){
ArrayList filteredList=新建ArrayList();
用于(配置文件:配置文件){
if(profile.getName().toLowerCase().contains(text.toLowerCase())){
filteredList.add(配置文件);
}
}
recyclerAdapter.filterList(过滤器列表);
profiles=newarraylist(filteredList);
}
@凌驾
公共void侦听(配置文件配置文件,整数位置){
recyclerListener.send(配置文件、位置);
}
@凌驾
已选择公共无效配置文件(配置文件){
}
//接口
公共接口回收列表器{
无效发送(配置文件、整数位置);
}
//附加
@凌驾
公共void-onAttach(上下文){
super.onAttach(上下文);
this.recyclerListener=(recyclerListener)上下文;
}
}
这是我的适配器
public class Adapter extends RecyclerView.Adapter<Adapter.ProfileViewHolder> {
private List<Profile> profiles;
private AdapterListener adapterListener;
//CONSTRUCTOR
public Adapter(List<Profile> profiles,AdapterListener adapterListener) {
this.profiles = profiles;
this.adapterListener = adapterListener;
}
@NonNull
@Override
public Adapter.ProfileViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
Context context = parent.getContext();
LayoutInflater layoutInflater = LayoutInflater.from(context);
View view = layoutInflater.inflate(R.layout.card_profile, parent, false);
ProfileViewHolder profileViewHolder = new ProfileViewHolder(view);
return profileViewHolder;
}
@Override
public void onBindViewHolder(@NonNull Adapter.ProfileViewHolder holder, int position) {
Profile profile = profiles.get(position);
holder.setter(profile);
}
@Override
public int getItemCount() {
return profiles.size();
}
public void filterList (ArrayList<Profile> filteredList){
profiles = filteredList;
notifyDataSetChanged();
}
//VIEWHOLDER
class ProfileViewHolder extends RecyclerView.ViewHolder{
private ImageView image;
private TextView name;
public ProfileViewHolder(View itemView) {
super(itemView);
name = itemView.findViewById(R.id.nameProfile);
image = itemView.findViewById(R.id.imageProfile);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Profile profile = profile.get(getAdapterPosition());
adapterListener.receive(profile, getAdapterPosition());
}
});
}
public void setter (Profile profile){
name.setText(profile.getName());
image.setImageResource(profile.getImage());
}
}
public interface AdapterListener {
void receive(Profile profile, Integer position);
}
}
公共类适配器扩展了RecyclerView.Adapter{
私人名单简介;
专用适配器列表器适配器列表器;
//建造师
公共适配器(列表配置文件、适配器列表器适配器列表器){
this.profiles=profiles;
this.adapterListener=adapterListener;
}
@非空
@凌驾
public Adapter.ProfileViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
Context=parent.getContext();
LayoutInflater LayoutInflater=LayoutInflater.from(上下文);
视图=布局更平坦。充气(R.layout.card_profile,父项,false);
ProfileViewHolder ProfileViewHolder=新的ProfileViewHolder(视图);
返回视图持有者;
}
@凌驾
public void onBindViewHolder(@NonNull Adapter.ProfileViewHolder holder,int位置){
Profile Profile=profiles.get(位置);
夹持器.设定器(外形);
}
@凌驾
public int getItemCount(){
返回profiles.size();
}
公共无效筛选器列表(ArrayList筛选器列表){
profiles=filteredList;
notifyDataSetChanged();
}
//观众
类ProfileViewHolder扩展了RecyclerView.ViewHolder{
私有图像查看图像;
私有文本视图名称;
公共档案视图持有者(查看项目视图){
超级(项目视图);
name=itemView.findviewbyd(R.id.nameProfile);
image=itemView.findviewbyd(R.id.imageProfile);
itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Profile=Profile.get(getAdapterPosition());
receive(profile,getAdapterPosition());
}
});
}
公共无效设置器(配置文件){
name.setText(profile.getName());
setImageResource(profile.getImage());
}
}
公共接口适配器列表器{
无效接收(配置文件、整数位置);
}
}
这将返回当前数据集项的位置。这就是我要做的
class ProfileViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private ImageView image;
private TextView name;
Profile mProfile;
public ProfileViewHolder(View itemView) {
super(itemView);
name = itemView.findViewById(R.id.nameProfile);
image = itemView.findViewById(R.id.imageProfile);
name.setOnClickListener(this);
image.setOnClickListener(this);
}
public void setter (Profile profile){
if(profile != null) {
mProfile = profile;
name.setText(mProfile.getName());
image.setImageResource(mProfile.getImage());
}
}
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.item_nameProfile:
case R.id.item_imageProfile:
for(int i = 0 ; i < profiles.size() ; i++) {
if(profiles.get(i).getName().equalsIgnoreCase(mProfile.getName()) {
adapterListener.receive(profiles.get(i), i);
break;
}
}
break;
}
}
public interface AdapterListener {
void receive(Profile profile, Integer position);
}
}
class ProfileViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
私有图像查看图像;
私有文本视图名称;
配置文件;
公共档案视图持有者(查看项目视图){
超级(项目视图);
name=itemView.findviewbyd(R.id.nameProfile);
image=itemView.findviewbyd(R.id.imageProfile);
name.setOnClickListener(this);
image.setOnClickListener(this);
}
公共无效设置器(配置文件){
if(profile!=null){
mProfile=配置文件;
name.setText(mProfile.getName());
setImageResource(mProfile.getImage());
}
}
}
@凌驾
公共void onClick(视图){
开关(view.getId()){
案例R.id.item_名称档案:
案例R.id.item_imageProfile:
对于(int i=0;iclass ProfileViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private ImageView image;
private TextView name;
Profile mProfile;
public ProfileViewHolder(View itemView) {
super(itemView);
name = itemView.findViewById(R.id.nameProfile);
image = itemView.findViewById(R.id.imageProfile);
name.setOnClickListener(this);
image.setOnClickListener(this);
}
public void setter (Profile profile){
if(profile != null) {
mProfile = profile;
name.setText(mProfile.getName());
image.setImageResource(mProfile.getImage());
}
}
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.item_nameProfile:
case R.id.item_imageProfile:
for(int i = 0 ; i < profiles.size() ; i++) {
if(profiles.get(i).getName().equalsIgnoreCase(mProfile.getName()) {
adapterListener.receive(profiles.get(i), i);
break;
}
}
break;
}
}
public interface AdapterListener {
void receive(Profile profile, Integer position);
}
}