簡體   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