简体   繁体   English

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

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

I've created a custom adapter for a class that have a button . 我为具有按钮的类创建了一个自定义适配器。 In this code I used onClick function in adapter class but I don't want this . 在这段代码中,我在适配器类中使用了onClick函数,但我不希望这样。 I want to call it from main activity class (Like listview.setOnItemClickListener). 我想从主要活动类(如listview.setOnItemClickListener)中调用它。 How can I do that ? 我怎样才能做到这一点 ? Notice that I want be able to get position of button or contact properties 请注意,我希望能够获取按钮或联系人属性的位置

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 ;
}

You can set onItemClickListener in main class after setting the adapter like the example given below: 设置适配器后,可以在主类中设置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中。

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

Remove on click listener from adapter and set listview on click listener. 从适配器中删除单击侦听器,然后在单击侦听器上设置listview。 Get data from contact array from on click position. 从单击位置从联系人数组获取数据。

暂无
暂无

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

相关问题 从列表视图活动中选择一个选项后,如何返回主活动 - How can I go back to main activity after selecting an option from my listview activity 如何在ListView适配器中缓存自定义视图? - How can I cache custom views in my ListView Adapter? 如何从主Activity中刷新片段中的ListView? - How can I refresh a ListView in a Fragment from the main Activity? 如何从我的自定义适配器更新ListView - How update ListView from my Custom Adapter 从自定义适配器(而不是从主要活动)开始意图 - 如何实现活动结果以重新加载适配器中的视图? - Starting an intent from custom adapter (not from the main activity) - how to implement on activity result to reload views in adapter? 根据Main Activity类的条件在Adapter类的listview中插入图像 - Insert images in listview of Adapter class according to the condition of Main Activity class 如何从主要活动中运行 java.class - How can I run a java.class from Main Activity 即使我在我的适配器 class 中初始化它,我是否可以从不同的 Activity/Fragment 暂停/停止 ExoPlayer? - Can I pause / stop ExoPlayer from a different Activity / Fragment even though I initialize it in my Adapter class? 如何从我的软键盘启动主要活动 - How can i start main Activity from my soft keyboard Android自定义ListView OnClick,甚至来自自定义适配器的图像 - Android Custom ListView OnClick even on an image from custom adapter
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM