java - 如何从自定义数组适配器传递一些数据
问题描述
我有这个自定义ArrayAdapter
类,数据源是一个firebase实时数据库。ArrayAdapter
我在多项活动中使用相同的习惯。在每个列表项上都有一个按钮可以打开相同的活动,但我正在从列表项中传递医生姓名。我还想在我调用自定义的活动时传递操作栏标题ArrayAdapter
这是 DoctorAdapter 类。
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
if (convertView == null) {
convertView = ((Activity) getContext()).getLayoutInflater().inflate(R.layout.doc_list_item, parent, false);
}
final Doctor doctor = getItem(position);
TextView dName, dSpeciality, dAvailability, dTime, dWeekDays, dAbout;
dName = convertView.findViewById(R.id.doc_name_text_view);
dName.setText(doctor.getName());
dSpeciality = convertView.findViewById(R.id.doc_speciality_text_view);
dSpeciality.setText(doctor.getSpeciality());
dTime = convertView.findViewById(R.id.doc_time_text_view);
dTime.setText(doctor.getTime());
dWeekDays = convertView.findViewById(R.id.doc_weekDays_text_view);
dWeekDays.setText(doctor.getWeekDays());
dAbout = convertView.findViewById(R.id.doc_info_text_view);
dAbout.setText(doctor.getInformation());
ImageView docImage;
docImage = convertView.findViewById(R.id.doc_image_view);
Glide.with(docImage.getContext())
.load(doctor.getImage())
.into(docImage);
Button bookAptBtn = convertView.findViewById(R.id.doc_book_apt_btn);
dAvailability = convertView.findViewById(R.id.doc_availability_text_view);
dAvailability.setText(doctor.getAvailability());
bookAptBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mContext, BookAppointmentActivity.class);
intent.putExtra("doctorName", doctor.getName());
mContext.startActivity(intent);
}
});
return convertView;
}
我的 OrthoDocsActivity
public class OrthoDocsActivity extends AppCompatActivity {
private FirebaseDatabase mFirebaseDatabase;
private DatabaseReference mOrthoDocsRef;
private ListView orthoDocsListView;
private ArrayList<Doctor> doctorArrayList;
private DoctorAdapter adapter;
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
findViewById(R.id.ortho_docs_progressBar).setVisibility(View.GONE);
doctorArrayList.clear();
for (DataSnapshot ds : snapshot.getChildren()) {
Doctor doctor = ds.getValue(Doctor.class);
doctorArrayList.add(doctor);
}
orthoDocsListView.setAdapter(adapter);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ortho_docs);
mFirebaseDatabase = FirebaseDatabase.getInstance();
mOrthoDocsRef = mFirebaseDatabase.getReference().child("doctor");
orthoDocsListView = findViewById(R.id.ortho_docs_listView);
doctorArrayList = new ArrayList<>();
adapter = new DoctorAdapter(this, R.layout.doc_list_item, doctorArrayList);
Query query = FirebaseDatabase.getInstance().getReference().child("doctor").orderByChild("speciality")
.equalTo("Orthopedics");
query.addValueEventListener(valueEventListener);
}
由于我在多个活动中使用 DoctorAdapter,因此我想在单击列表项上的按钮时传递操作栏标题
解决方案
您可以简单地在您的适配器类中创建一个字符串变量标题。并通过适配器的构造函数传递变量的值。然后在单击按钮时,您使用 putExtra 发送值。
adapter = new DoctorAdapter(this, R.layout.doc_list_item, doctorArrayList,titleBar);
在适配器代码中看起来像
bookAptBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mContext, BookAppointmentActivity.class);
intent.putExtra("doctorName", doctor.getName());
intent.putExtra("Title", title); // the action bar title you want
mContext.startActivity(intent);
}
});
推荐阅读
- javascript - 如何将每个值放入已经按值分组的数组中?
- javascript - 过滤列表中的列表并保留结构
- typescript - 是否有一种标准方法可以自动测试 typescript 编译时结构(如映射类型)?
- c# - 记录 Entity Framework .Net Core 2.2 EF 以调试输出窗口
- html - 我试图在离子中创建一个导航菜单,但它无法点击并切断我的离子含量
- html - 如何在按钮单击时触发 JAWS 文本转语音?
- azure - 在 Azure AD 中,如何在首次登录时排除一部分用户需要身份验证信息
- flutter - 如何在相机上添加矩形叠加层并使用颤振将图像保存到画廊
- c++ - 多重继承C++的钻石问题
- ios - Swift UI 测试无法在 iOS 12.3 之前的设备上启动