@Override
  public View getView(final int position, View convertView, ViewGroup parent) {
    final PackageItem item = getItem(position);
    ViewHolder holder;
    if (convertView == null) {
      LayoutInflater li =
          (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
      convertView = li.inflate(R.layout.package_row, parent, false);
      holder = new ViewHolder();
      holder.tvTitle = (TextView) convertView.findViewById(R.id.example_row_tv_title);
      holder.tvDescription = (TextView) convertView.findViewById(R.id.example_row_tv_description);
      holder.bAction1 = (ImageButton) convertView.findViewById(R.id.button_edit_rule);
      holder.bAction2 = (Button) convertView.findViewById(R.id.button_disable_rule);
      holder.bAction3 = (ImageButton) convertView.findViewById(R.id.button_delete_rule);
      convertView.setTag(holder);
    } else {
      holder = (ViewHolder) convertView.getTag();
    }

    ((SwipeListView) parent).recycle(convertView, position);

    holder.tvTitle.setText(item.getName());
    holder.tvDescription.setText(item.toString());

    holder.bAction1.setOnClickListener(
        new View.OnClickListener() {
          @Override
          public void onClick(View v) {
            mHandler.obtainMessage(RuleList.MESSAGE_EDIT_RULE, position, -1).sendToTarget();
          }
        });

    holder.bAction2.setOnClickListener(
        new View.OnClickListener() {
          @Override
          public void onClick(View v) {
            mHandler.obtainMessage(RuleList.MESSAGE_DISABLE_RULE, position, -1).sendToTarget();
          }
        });

    holder.bAction3.setOnClickListener(
        new View.OnClickListener() {
          @Override
          public void onClick(View v) {
            mHandler.obtainMessage(RuleList.MESSAGE_DELETE_RULE, position, -1).sendToTarget();
          }
        });

    return convertView;
  }