繁体   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