You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RecyclerView结合Firebase数据库实现点击跳转详情页的问题

解决RecyclerView条目点击跳转详情页并展示完整数据的问题

没问题,我来帮你搞定这个需求!要实现点击RecyclerView里的牙医条目,跳转到DetailsPage展示完整的Nom、Adresse、NumTel和Email信息,咱们分几个步骤修改代码就好:


第一步:修改Liste.java中的点击事件,传递完整数据

你现在的点击事件只是启动了详情页,但没把选中牙医的信息传过去。咱们调整一下点击事件的逻辑,把数据通过Intent传递出去:

方式1:逐个传递字段(简单直接)

在MyViewHolder的onClick方法里,先获取选中的牙医数据,再把每个字段放进Intent:

itemView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View itemView) {
        int pos = getAdapterPosition();
        if(pos != RecyclerView.NO_POSITION){
            Dentist clickedDataItem = listArray.get(pos);
            
            // 创建Intent并添加所有需要传递的字段
            Intent intent = new Intent(itemView.getContext(), DetailsPage.class);
            intent.putExtra("KEY_NOM", clickedDataItem.getNom());
            intent.putExtra("KEY_ADRESSE", clickedDataItem.getAdresse());
            intent.putExtra("KEY_NUMTEL", clickedDataItem.getNumTel());
            intent.putExtra("KEY_EMAIL", clickedDataItem.getEmail());
            
            // 启动详情页
            itemView.getContext().startActivity(intent);
            Toast.makeText(itemView.getContext(), "You clicked " + clickedDataItem.getNom(), Toast.LENGTH_SHORT).show();
        }
    }
});

方式2:传递整个Dentist对象(更优雅,适合字段多的情况)

如果以后牙医的字段可能增加,推荐用这种方式,先让Dentist类实现Serializable接口:
修改你的Dentist.java:

public class Dentist implements Serializable {
    private String Nom;
    private String Adresse;
    private String NumTel;
    private String Email;

    // 原有的getter和setter保持不变
    public String getNom() { return Nom; }
    public void setNom(String nom) { Nom = nom; }
    public String getAdresse() { return Adresse; }
    public void setAdresse(String adresse) { Adresse = adresse; }
    public String getNumTel() { return NumTel; }
    public void setNumTel(String numTel) { NumTel = numTel; }
    public String getEmail() { return Email; }
    public void setEmail(String email) { Email = email; }
}

然后在Liste的点击事件里直接传递整个对象:

itemView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View itemView) {
        int pos = getAdapterPosition();
        if(pos != RecyclerView.NO_POSITION){
            Dentist clickedDataItem = listArray.get(pos);
            
            Intent intent = new Intent(itemView.getContext(), DetailsPage.class);
            intent.putExtra("KEY_DENTIST", clickedDataItem);
            
            itemView.getContext().startActivity(intent);
            Toast.makeText(itemView.getContext(), "You clicked " + clickedDataItem.getNom(), Toast.LENGTH_SHORT).show();
        }
    }
});

第二步:修改DetailsPage.java,接收数据并展示

首先,你需要确保activity_details_page.xml里已经添加了对应展示NumTel和Email的TextView(如果还没加,先补上),比如:

<!-- 已有的detail_nom -->
<TextView
    android:id="@+id/detail_nom"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="18sp"
    android:textStyle="bold"/>

<!-- 添加以下三个TextView -->
<TextView
    android:id="@+id/detail_adresse"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="16sp"/>

<TextView
    android:id="@+id/detail_numtel"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="16sp"/>

<TextView
    android:id="@+id/detail_email"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="16sp"/>

然后修改DetailsPage.java的代码,接收Intent传递的数据并设置到TextView上:

如果用方式1(逐个传字段):

public class DetailsPage extends AppCompatActivity {
    Toolbar toolbar;
    TextView DetailNom, DetailAdresse, DetailNumTel, DetailEmail;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate ( savedInstanceState );
        setContentView ( R.layout.activity_details_page );
        
        this.toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        setTitle ( "Détails du Médecin" );
        
        // 初始化所有TextView
        DetailNom = (TextView)findViewById ( R.id.detail_nom );
        DetailAdresse = (TextView)findViewById ( R.id.detail_adresse );
        DetailNumTel = (TextView)findViewById ( R.id.detail_numtel );
        DetailEmail = (TextView)findViewById ( R.id.detail_email );
        
        // 获取Intent里的字段数据
        Intent intent = getIntent();
        if(intent != null){
            String nom = intent.getStringExtra("KEY_NOM");
            String adresse = intent.getStringExtra("KEY_ADRESSE");
            String numTel = intent.getStringExtra("KEY_NUMTEL");
            String email = intent.getStringExtra("KEY_EMAIL");
            
            // 设置文本
            DetailNom.setText(nom);
            DetailAdresse.setText(adresse);
            DetailNumTel.setText(numTel);
            DetailEmail.setText(email);
        }
    }
}

如果用方式2(传递整个对象):

public class DetailsPage extends AppCompatActivity {
    Toolbar toolbar;
    TextView DetailNom, DetailAdresse, DetailNumTel, DetailEmail;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate ( savedInstanceState );
        setContentView ( R.layout.activity_details_page );
        
        this.toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        setTitle ( "Détails du Médecin" );
        
        // 初始化所有TextView
        DetailNom = (TextView)findViewById ( R.id.detail_nom );
        DetailAdresse = (TextView)findViewById ( R.id.detail_adresse );
        DetailNumTel = (TextView)findViewById ( R.id.detail_numtel );
        DetailEmail = (TextView)findViewById ( R.id.detail_email );
        
        // 获取传递过来的Dentist对象
        Intent intent = getIntent();
        if(intent != null){
            Dentist dentist = (Dentist) intent.getSerializableExtra("KEY_DENTIST");
            if(dentist != null){
                DetailNom.setText(dentist.getNom());
                DetailAdresse.setText(dentist.getAdresse());
                DetailNumTel.setText(dentist.getNumTel());
                DetailEmail.setText(dentist.getEmail());
            }
        }
    }
}

这样修改之后,点击RecyclerView里的任意条目,就能跳转到详情页看到该牙医的完整信息啦!

内容的提问来源于stack exchange,提问作者Nesrine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:17:40