android - 如果使用firebase数据库单击,如何获取卡片视图的信息?
问题描述
Firebase 数据库
在这张图片中,我有 3 个数据,它们是苏哈薯条、阿曼薯条和草莓牛奶。
我在项目中的下一步是获取作为卡片视图标题的信息并将它们存储在稍后将使用的文本视图中。卡片视图
问题:在获取信息时,我尝试使用 onClick 按钮检索单个卡片视图的信息。问题是,每次我单击卡片视图(例如 sohar 薯条)时,我都会像 sohar、阿曼和草莓牛奶一样直接打开三个窗口。
我只想检索单卡视图上的信息,而不是全部。
public class ViewHolder extends RecyclerView.Adapter<ViewHolder.ImageViewHolder> {
private Context mContext;
private List<Model> mModel;
public ViewHolder(Context context, List<Model> models)
{
mContext=context;
mModel=models;
}
@NonNull
@Override
public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(mContext).inflate(R.layout.row, viewGroup,false);
return new ImageViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull ImageViewHolder imageViewHolder, int i) {
Model mModelcur = mModel.get(i);
imageViewHolder.img_description.setText(mModelcur.getDescription());
imageViewHolder.img_title.setText(mModelcur.getTitle());
Picasso.get().load(mModelcur.getImage())
.into(imageViewHolder.image_view, new Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError(Exception e) {
Log.i("log" , e.getMessage());
}
});
}
@Override
public int getItemCount() {
return mModel.size();
}
public class ImageViewHolder extends RecyclerView.ViewHolder
{
public TextView img_description;
public TextView img_title;
public ImageView image_view;
public ImageViewHolder(@NonNull View itemView) {
super(itemView);
img_description = itemView.findViewById(R.id.rDescription);
image_view = itemView.findViewById(R.id.rImageview);
img_title = itemView.findViewById(R.id.rTextview);
}
}
}
public class Ordering extends AppCompatActivity {
private RecyclerView mRecyclerView;
private ViewHolder mAdapter;
private DatabaseReference mDatabaseReference;
private List<Model> mModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ordering);
mRecyclerView= findViewById(R.id.recyclerview);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mModel = new ArrayList<>();
mAdapter=new ViewHolder(Ordering.this, mModel);
mRecyclerView.setAdapter(mAdapter);
mDatabaseReference=FirebaseDatabase.getInstance().getReference("Data");
mDatabaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot postSnapshot:dataSnapshot.getChildren())
{
Model model=postSnapshot.getValue(Model.class);
mModel.add(model);
}
mAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(Ordering.this, databaseError.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
public void onDetails(final View view) {
final List<Model> mModel = new ArrayList<>();
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Data");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot postSnapshot:dataSnapshot.getChildren())
{
String title = postSnapshot.child("title").getValue().toString();
Intent intent = new Intent(view.getContext(),Detailsoforder.class);
intent.putExtra("title",title);
startActivity(intent);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
行.xml
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/parentLayout"
android:onClick="onDetails">
<TextView
android:id="@+id/rTextview"
android:text="Title"
android:textColor="#000"
android:textSize="22sp"
android:textStyle="bold"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/rImageview"
android:layout_width="match_parent"
android:layout_height="200dp"
android:scaleType="centerCrop"
android:adjustViewBounds="true"
android:background="@drawable/loading"/>
<TextView
android:id="@+id/rDescription"
android:text="This will be the description"
android:textSize="20sp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
解决方案
首先在你的 recyclerview Xml 文件中给 cardview 一些特定的 id。
现在,这是您的适配器类。
public class ViewHolder extends RecyclerView.Adapter<ViewHolder.ImageViewHolder> {
private Context mContext;
private List<Model> mModel;
public ViewHolder(Context context, List<Model> models)
{
mContext=context;
mModel=models;
}
@NonNull
@Override
public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(mContext).inflate(R.layout.row, viewGroup,false);
return new ImageViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull ImageViewHolder imageViewHolder, int i) {
Model mModelcur = mModel.get(i);
imageViewHolder.img_description.setText(mModelcur.getDescription());
imageViewHolder.img_title.setText(mModelcur.getTitle());
imageViewHolder.yourcardview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mcontext, yourWantedActivity.class);
intent.putExtra("your key", mMOdel.get(i).getTitle());
mcontext.startActivity(intent);
}
});
Picasso.get().load(mModelcur.getImage())
.into(imageViewHolder.image_view, new Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError(Exception e) {
Log.i("log" , e.getMessage());
}
});
}
@Override
public int getItemCount() {
return mModel.size();
}
public class ImageViewHolder extends RecyclerView.ViewHolder
{
public TextView img_description;
public TextView img_title;
public ImageView image_view;
public YourCardView yourcardview;
public ImageViewHolder(@NonNull View itemView) {
super(itemView);
img_description = itemView.findViewById(R.id.rDescription);
image_view = itemView.findViewById(R.id.rImageview);
img_title = itemView.findViewById(R.id.rTextview);
yourcardview = item.findViewById(R.id.yourcardviewId);
}
}
}
我用 cardview 及其列表器更新您的适配器请结帐,任何问题请在下面评论。
推荐阅读
- c# - 如何使用鼠标光标移动对象
- java - 是带有单个参数的 Java 方法来接收两个 HashMap 的值
和 HashMap 可能的? - android - 如何达到 150MB 的限制来发布应用程序?
- csv - Kafka 与 Salesforce 的集成
- python-3.x - Python 3.7 从 csv 中的特定点开始读取
- angular - 我如何(或可以)对 Angular SSR Universal 应用程序进行实时代码更改?
- android - 与管道的持续集成
- python - 为什么 matplotlib 会为我绘制叠加旧图形的新图形?
- angular - Express 服务器未部署 Angular 8 应用程序
- email - 无法从 GCP 主机发送电子邮件