簡體   English   中英

單擊偵聽器不適用於自定義適配器上的列表視圖

[英]Click Listener not working on listview on custom adapter

private class MyAdapter extends ArrayAdapter {

        public MyAdapter(Context context, int resource, ArrayList objects) {
            super(context, resource, objects);
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            View v = getLayoutInflater().inflate(R.layout.item,null);

            ImageButton btn_cancel = v.findViewById(R.id.btn_cancelDownload);



            btn_cancel.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(this, "click", Toast.LENGTH_SHORT).show();
                }
            });
            return v;
        }
    }

我正在使用自定義列表視圖,並且在此 Imagebutton 上單擊偵聽器不起作用我也嘗試過同樣不起作用的 listview.setOnItemSelectedListener 我也更改了布局。 但這是行不通的。

請嘗試創建這樣的適配器。

  public class CustomAdapter extends ArrayAdapter<DataModel> implements View.OnClickListener{

   private ArrayList<DataModel> dataSet;
   Context mContext;

// View lookup cache
    private static class ViewHolder {
      TextView txtName;
      TextView txtType;
      TextView txtVersion;
      ImageView info;
   }

   public CustomAdapter(ArrayList<DataModel> data, Context context) {
      super(context, R.layout.row_item, data);
      this.dataSet = data;
      this.mContext=context;

   }

   @Override
    public void onClick(View v) {

      int position=(Integer) v.getTag();
      Object object= getItem(position);
      DataModel dataModel=(DataModel)object;

      switch (v.getId())
        {
         case R.id.item_info:
             Snackbar.make(v, "Release date " +dataModel.getFeature(), Snackbar.LENGTH_LONG)
                    .setAction("No action", null).show();
             break;
       }
   }

  private int lastPosition = -1;

   @Override
     public View getView(int position, View convertView, ViewGroup parent) {
      // Get the data item for this position
      DataModel dataModel = getItem(position);
      // Check if an existing view is being reused, otherwise inflate the view
      ViewHolder viewHolder; // view lookup cache stored in tag

      final View result;

     if (convertView == null) {

          viewHolder = new ViewHolder();
          LayoutInflater inflater = LayoutInflater.from(getContext());
          convertView = inflater.inflate(R.layout.row_item, parent, false);
          viewHolder.txtName = (TextView) convertView.findViewById(R.id.name);
          viewHolder.txtType = (TextView) convertView.findViewById(R.id.type);
          viewHolder.txtVersion = (TextView) convertView.findViewById(R.id.version_number);
        viewHolder.info = (ImageView) convertView.findViewById(R.id.item_info);

        result=convertView;

        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
        result=convertView;
    }

    Animation animation = AnimationUtils.loadAnimation(mContext, (position > lastPosition) ? R.anim.up_from_bottom : R.anim.down_from_top);
    result.startAnimation(animation);
    lastPosition = position;

    viewHolder.txtName.setText(dataModel.getName());
    viewHolder.txtType.setText(dataModel.getType());
    viewHolder.txtVersion.setText(dataModel.getVersion_number());
    viewHolder.info.setOnClickListener(this);
    viewHolder.info.setTag(position);
    // Return the completed view to render on screen
    return convertView;
}

}

您可以像這樣創建 adpater,請告訴我這是否可以幫助您,我也在分享參考鏈接。 https://www.journaldev.com/10416/android-listview-with-custom-adapter-example-tutorial

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM