繁体   English   中英

如何从主要活动类中的自定义列表视图适配器管理onClick函数

[英]How can I manage onClick function from my custom listview adapter in main activity class

我为具有按钮的类创建了一个自定义适配器。 在这段代码中,我在适配器类中使用了onClick函数,但我不希望这样。 我想从主要活动类(如listview.setOnItemClickListener)中调用它。 我怎样才能做到这一点 ? 请注意,我希望能够获取按钮或联系人属性的位置

public View getView(int position,View convertView,ViewGroup parent) {

    Contact contact = contacts.get(position);
    final ViewHolder holder ;
    if (convertView == null){
        holder = new ViewHolder();
        LayoutInflater inflater = LayoutInflater.from(context) ;
        convertView = inflater.inflate(resource,parent,false);
        holder.btnCall = convertView.findViewById(R.id.btnCall);
        holder.imgAvatar = convertView.findViewById(R.id.imgAvatar);
        holder.txtName = convertView.findViewById(R.id.txtName);
        holder.txtPhoneNumber = convertView.findViewById(R.id.txtPhoneNumber);
        convertView.setTag(holder);
    }else {
        holder = (ViewHolder)convertView.getTag();
    }
    holder.txtPhoneNumber.setText(contact.getContactNumber());
    holder.txtName.setText(contact.getContactName());
    int imageId = contact.getGender() == 0 ? R.drawable.male : R.drawable.female;
    holder.imgAvatar.setImageResource(imageId);
    holder.btnCall.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(context, holder.txtName.getText().toString() + " "
                    + holder.txtPhoneNumber.getText().toString(), Toast.LENGTH_SHORT).show();
        }
    });
    return convertView ;

}

private class ViewHolder{

    public ImageView imgAvatar ;
    public TextView txtPhoneNumber ;
    public TextView txtName ;
    public Button btnCall ;
}

设置适配器后,可以在主类中设置onItemClickListener,如下例所示:

  listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, final View view,
                int position, long id) {
        final String item =(String)parent.getItemAtPosition(position);
        list.remove(item);
        adapter.notifyDataSetChanged();
        }

    });

将onClickListener添加到ListAdapter的getView()中的Button中。

您可以创建一个带有要传递的数据参数的方法的接口,然后将该接口传递给适配器并在活动中实现该接口

从适配器中删除单击侦听器,然后在单击侦听器上设置listview。 从单击位置从联系人数组获取数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM