SearcView в RecrclerView показывает неправильную запись. android Студия - PullRequest
0 голосов
/ 11 марта 2020

", когда я нажимаю без фильтра, позиция верна, но когда я использую вид поиска, я делаю фильтр, но показываю неправильное изображение или неправильную позицию.

он удерживает старую позицию даже после фильтра.

, пожалуйста, помогите "

enter code herepublic class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ImageViewHolder> {
private Context mContext;
private List<Report> mUploads;
//private List<Report> myList;

private OnItemClickListener mListener;

public ImageAdapter(Context context, List<Report> uploads) {
    mContext = context;
    mUploads = uploads;
   // myList=uploads;
}

@Override
public ImageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    // View v = LayoutInflater.from(mContext).inflate(R.layout.image_item, parent, false);
    View v = LayoutInflater.from(mContext).inflate(R.layout.display_report_layout,parent,false);
    return new ImageViewHolder(v);
}

@Override
public void onBindViewHolder(ImageViewHolder holder, int position) {
    Report uploadCurrent = mUploads.get(position);
    //Report uploadfiltered=myList.get(position);
   // holder.ADD.setText(uploadfiltered.getADD());
    holder.TitleMarker.setText(uploadCurrent.getIssue());
    holder.Time.setText(uploadCurrent.getTime());
    holder.ADD.setText(uploadCurrent.getADD());
    holder.DescriptionText.setText(uploadCurrent.getDescription());
    holder.state.setText(uploadCurrent.getSTATEs());


    if (uploadCurrent.getThumbnail() != null && uploadCurrent.getThumbnail().contains("https")) {
        Picasso.with(mContext)
                .load(uploadCurrent.getThumbnail())
                .fit()
                .centerInside()
                .into(holder.imageView);


    }

}

@Override
public int getItemCount() {
    return mUploads.size();
}

public class ImageViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener,
        View.OnCreateContextMenuListener, MenuItem.OnMenuItemClickListener {
    public TextView TitleMarker;
    public TextView Time;
    public TextView ADD;
    public ImageView imageView;
    public TextView DescriptionText;
    public TextView state;


    public ImageViewHolder(View itemView) {
        super(itemView);

        TitleMarker = itemView.findViewById(R.id.TitleMarker);
        Time = itemView.findViewById(R.id.Time);
        ADD = itemView.findViewById(R.id.Address);
        imageView = itemView.findViewById(R.id.Photo);
        DescriptionText = itemView.findViewById(R.id.ListviewDescription);
        state = itemView.findViewById(R.id.Stateurgent);

        itemView.setOnClickListener(this);
        itemView.setOnCreateContextMenuListener(this);
    }






    @Override
    public void onClick(View v) {
        if (mListener != null) {
            int position = getAdapterPosition();
            if (position != RecyclerView.NO_POSITION) {
                mListener.onItemClick(position);
            }
        }
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {



    }

    @Override
    public boolean onMenuItemClick(MenuItem item) {
        if (mListener != null) {
            int position = getAdapterPosition();
            if (position != RecyclerView.NO_POSITION) {


            }
        }
        return false;
    }
}

public void setSearchOperation(List<Report> newList){
    mUploads=new ArrayList<>();
    mUploads.addAll(newList);
    notifyDataSetChanged();
}



public interface OnItemClickListener {
    void onItemClick(int position);

    void onWhatEverClick(int position);

    void onDeleteClick(int position);
}

public void setOnItemClickListener(OnItemClickListener listener) {
    mListener = listener;
}

}

Этот выше мой класс адаптера

ниже мой основной класс

enter code here 

publi c Класс ImagesActivity расширяет AppCompatActivity, реализует ImageAdapter.OnItemClickListener {private RecyclerView mRecyclerView; частный ImageAdapter mAdapter;

private ProgressBar mProgressCircle;

private FirebaseStorage mStorage;
private DatabaseReference mDatabaseRef;
private ValueEventListener mDBListener;
private String imagepath ;
Toolbar mToolbar;
SearchView mSearchView;

private List<Report> mUploads;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // setContentView(R.layout.activity_images);

    setContentView(R.layout.activity_images);


    mToolbar=findViewById(R.id.toolbar);
    setSupportActionBar(mToolbar);

    mRecyclerView = findViewById(R.id.recycler_view);
    mRecyclerView.setHasFixedSize(true);
    LinearLayoutManager layoutManager = new LinearLayoutManager(this);
    layoutManager.setStackFromEnd(false);
    mRecyclerView.setLayoutManager(layoutManager);


    mProgressCircle = findViewById(R.id.progress_circle);

    mUploads = new ArrayList<>();


    mAdapter = new ImageAdapter(ImagesActivity.this, mUploads);

    mRecyclerView.setAdapter(mAdapter);

    mAdapter.setOnItemClickListener(ImagesActivity.this);

    mStorage = FirebaseStorage.getInstance();
    mDatabaseRef = FirebaseDatabase.getInstance().getReference().child("Users").child("Reports");

    mDBListener = mDatabaseRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Log.d( "Datasnapshot read.", String.valueOf(dataSnapshot));
            mUploads.clear();

            for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                Report upload = postSnapshot.getValue(Report.class);
                upload.setKey(postSnapshot.getKey());
                // Log.d( "LATLNG read value.", String.valueOf(mUploads));
                mUploads.add(upload);
                Collections.reverse(mUploads);
                Log.d("test", upload.getImage64());

            }

            mAdapter.notifyDataSetChanged();

            mProgressCircle.setVisibility(View.INVISIBLE);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Toast.makeText(ImagesActivity.this, databaseError.getMessage(), Toast.LENGTH_SHORT).show();
            mProgressCircle.setVisibility(View.INVISIBLE);
        }
    });

    mAdapter.notifyDataSetChanged();

    mProgressCircle.setVisibility(View.INVISIBLE);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.example_menu,menu);
    SearchManager searchManager=(SearchManager)getSystemService(Context.SEARCH_SERVICE);
    mSearchView=(SearchView) menu.findItem(R.id.action_search).getActionView();
    mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    mSearchView.setMaxWidth(Integer.MAX_VALUE);
    mSearchView.setQueryHint(getString(R.string.searchview));
    mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            newText=newText.toLowerCase();

            Log.d( "New text.", String.valueOf(newText));
            List<Report> myList= new ArrayList<>();
            for(Report report:mUploads){





              try {

                  String Title=report.getIssue().toLowerCase();
                  String Title2=report.getADD().toLowerCase();
                  Log.d( "Uzair Title", String.valueOf(Title));

                  if (Title.contains(newText) || Title2.contains(newText))



                      myList.add(report);

              }catch (Exception e ){

                  if(e==null){
                      Log.e("e","e is really null");
                  }
              }
              }


            mAdapter.setSearchOperation(myList);
            return false;
        }
    });

    return true;
}

@Override
public void onItemClick(int position) {
     Toast.makeText(this, "is this listview click " + position, Toast.LENGTH_SHORT).show();
    Report r = mUploads.get(position);
    // selectedItem.getImageUrl();

    Intent intent= new Intent(ImagesActivity.this, DisplayRActivity.class);
    intent.putExtra("ID",r.getKey());
    intent.putExtra("Issue",r.getIssue());
    intent.putExtra("Title",r.getTitle());
    intent.putExtra("userName",r.getUserName());
    intent.putExtra("desc",r.getDescription());
    intent.putExtra("photo",r.getImage64());
    intent.putExtra("time",r.getTime());
    intent.putExtra("profilepic",r.getAvatar64());
    intent.putExtra("States",r.getSTATEs());
    Log.d("motherff",String.valueOf(r.getSTATEs()));
    startActivity(intent);
}

@Override
public void onWhatEverClick(int position) {
    // Toast.makeText(this, "Whatever click at position: " + position, Toast.LENGTH_SHORT).show();
}

@Override
public void onDeleteClick(int position) {

}

@Override
protected void onDestroy() {
    super.onDestroy();
    mDatabaseRef.removeEventListener(mDBListener);
}

}

...