android - 如何在 RecyclerView 中添加 OnClickListener 和动画?
问题描述
好的,所以我有 RecyclerView,我在其中从 Firebase 实时数据库中检索一些数据,并且我有一个 SearchView 来过滤我的数据库。现在我想要两件事
我想要一个 OnClicListener 在我的活动中,我可以通过单击项目来打开一个片段。
每次向下滚动时,我都想将动画应用于我的 RecyclerView。
注意: OnClickListener 也应该在过滤数据后工作。
到目前为止,我无法做到这一点。这是我的代码
Adapter Class -> AdapterClass.java
public class AdapterClass extends RecyclerView.Adapter<AdapterClass.MyViewHolder>{
ArrayList<Deal> list;
public AdapterClass(ArrayList<Deal> list)
{
this.list = list;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_holder,viewGroup,false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, final int i) {
myViewHolder.id.setText(list.get(i).getDealId());
myViewHolder.desc.setText(list.get(i).getDealDisc());
}
@Override
public int getItemCount() {
return list.size();
}
static class MyViewHolder extends RecyclerView.ViewHolder{
TextView id,desc;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
id= itemView.findViewById(R.id.dealId);
desc=itemView.findViewById(R.id.description);
}
}
}
Model Class -> Deal.java
public class Deal {
private String dealDisc;
private String dealId;
private String dealImage;
private String price;
public Deal() {
}
public Deal(String dealDisc, String dealId, String dealImage, String price) {
this.dealDisc = dealDisc;
this.dealId = dealId;
this.dealImage = dealImage;
this.price = price;
}
public String getDealDisc() {
return dealDisc;
}
public void setDealDisc(String dealDisc) {
this.dealDisc = dealDisc;
}
public String getDealId() {
return dealId;
}
public void setDealId(String dealId) {
this.dealId = dealId;
}
public String getDealImage() {
return dealImage;
}
public void setDealImage(String dealImage) {
this.dealImage = dealImage;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
}
Main Activity -> MainActivity.java
public class MainActivity extends AppCompatActivity {
DatabaseReference ref;
ArrayList<Deal> list;
RecyclerView recyclerView;
SearchView searchView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ref= FirebaseDatabase.getInstance().getReference().child("rana");
recyclerView = findViewById(R.id.rv);
searchView=findViewById(R.id.searchView);
}
@Override
protected void onStart() {
super.onStart();
if (ref != null)
{
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists())
{
list = new ArrayList<>();
for (DataSnapshot ds : dataSnapshot.getChildren())
{
list.add(ds.getValue(Deal.class));
}
AdapterClass adapterClass = new AdapterClass(list);
recyclerView.setAdapter(adapterClass);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(MainActivity.this, databaseError.getMessage(), Toast.LENGTH_SHORT).show();
}
});
if (searchView != null)
{
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
return false;
}
@Override
public boolean onQueryTextChange(String s) {
search(s);
return true;
}
});
}
}
}
private void search(String str) {
ArrayList<Deal> myList = new ArrayList<>();
for (Deal object : list)
{
if (object.getDealDisc().toLowerCase().contains(str.toLowerCase()) || object.getDealId().toLowerCase().contains(str.toLowerCase()))
{
myList.add(object);
}
}
AdapterClass adapterClass = new AdapterClass(myList);
recyclerView.setAdapter(adapterClass);
}
}
解决方案
myViewHolder.id.setonclickListener()
推荐阅读
- selenium - Selenium 中最小的工作按压和保持示例
- ruby-on-rails - 资源未找到 Ruby on Rails
- opengl - 如何丢弃 GLSL 计算着色器中的调用
- python - Pandas:Dataframe itertuples 布尔系列 groupby 优化
- django - Factoryboy 无法生成依赖数据库的字段
- xamarin - Xamarin Forms 错误 APT1000:在应有项目的位置找到标记 id (Android)
- html - 如何使用 flex 并排修复此流程图与 Div(用于流程图步骤)和 Container(用于内容)对齐
- node.js - IBM Cloud Functions 和 Node.js:如何获取日本时间?
- r - 删除 geom_tile 中分隔样本的灰色垂直条纹
- haskell - 在 Haskell 中输出多个文件