首页 > 解决方案 > 如何从自定义数组适配器传递一些数据

问题描述

我有这个自定义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,因此我想在单击列表项上的按钮时传递操作栏标题

标签: javaandroidandroid-actionbarandroid-arrayadapter

解决方案


您可以简单地在您的适配器类中创建一个字符串变量标题。并通过适配器的构造函数传递变量的值。然后在单击按钮时,您使用 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);
            }
        });

推荐阅读