【问题标题】:Cannot retrive values from RecyclerView ,Recyclerview is populated via the SQlite DB无法从 RecyclerView 检索值,Recyclerview 通过 SQlite DB 填充
【发布时间】:2019-06-20 12:10:47
【问题描述】:

基本上我们需要从recyclerview获取邮件

我们尝试在RecyclerView中的TextView上添加onClickListener,但是当RecyclerView中有多个条目时,我们无法获取该值。

在填充 RecyclerView 并将值传递给另一个 Activity 之前,我有什么方法可以将值存储在变量中?

我尝试从RecyclerView 中的TextView 获取值,但我总是在第一行显示文本

Intent 不适用于 Adapter 类,因为它不是一个活动

ArrayList<ModelClass> objModelClassArrayList;

public DatabaseRecyclerAdapter(ArrayList<ModelClass> objModelClassArrayList) {
    this.objModelClassArrayList = objModelClassArrayList;
}

@NonNull
@Override
public DatabaseViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{
    View singleRow= LayoutInflater.from(parent.getContext()).inflate(R.layout.single_row,parent,false);
    return new DatabaseViewHolder(singleRow);

}

@Override
public void onBindViewHolder(@NonNull DatabaseViewHolder holder, int position)
{
    ModelClass objModelClass=objModelClassArrayList.get(position);
    holder.userNameTV.setText(objModelClass.getName());
    holder.userLocation.setText(objModelClass.getAddress());
    String e1=objModelClass.getEmail();
    holder.userEmail.setText(e1);


}


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

public static class DatabaseViewHolder extends RecyclerView.ViewHolder
{

    TextView userNameTV,userLocation,userEmail;
    public DatabaseViewHolder(@NonNull View itemView)
    {
        super(itemView);
        userNameTV=itemView.findViewById(R.id.sr_userNameTV);
        userLocation=itemView.findViewById(R.id.sr_location);
        userEmail=itemView.findViewById(R.id.sr_email);
    }
}

我想从一行中提取电子邮件并将其传递到另一个页面,在那里我可以在数据库查询中传递它以从数据库中获取结果。

【问题讨论】:

  • 你的问题太混乱了。您想从 TextView 获取电子邮件并将其传递给另一个活动?
  • "无论如何我可以在填充 RecyclerView 并将值传递给另一个 Activity 之前将值存储在变量中" 是的,您只需要创建一个新的引用模型类型。例如在这种情况下,它可能是 ArrayList&lt;ModelClass&gt; objModelClassArrayList,因为您可以看到您已经拥有对可用数据的引用,因此请从 objModelClassArrayList 获取电子邮件。

标签: android android-recyclerview onclicklistener


【解决方案1】:

首先,需要在适配器的构造函数中传递上下文,它可以帮助您从 recyclerView 适配器打开另一个活动。然后在 BindViewHolder 里面,你可以像下面这样创建 clickListener,

         holder.itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                     String emailText=holder.userEmail.getText().trim();
                     Intent intent=new Intent(context,activity_name_you _want_ to_open);
                     intent.setExtra("emailName",emailText);
                     (name of activity contains RV)context.startActivity(intent)
                     //Note: here context needs to be typecasted to activity from which we want to open new activity.

                    }
                });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    相关资源
    最近更新 更多