Search code examples
androidandroid-listview

Click on button will change the visibility of buttons in list item from invisible to visible


enter image description here

In the list Items, there is a button "delete" and textview.. on click of delete button in list item I am deleting that particular list item.. but My question is:that delete button is invisible at the start and when user click on "edit" button shown below at the top of the screen, I want to make all the buttons from invisible to visible.. But I am not getting how to implement that..

ListViewAdapater.java :

public class ListViewAdapter extends BaseAdapter {

    public ArrayList<String> list;
    Context context;
    private LayoutInflater mInflater;

    int count = 0;
    static int list_size;

    public ListViewAdapter(Context context, ArrayList<String> list) {
        super();
        this.context = context;
        this.list = list;
        mInflater = LayoutInflater.from(context);
        list_size = list.size();
    }

    public int getCount() {
        if (list == null) {
            return 0;
        } else {
            return list_size;
        }
    }

    @Override
    public Object getItem(int position) {
        Log.i("Calling getItem()", "getItem()");
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        Log.i("Calling getItemId()", "getItemId()");
        return position;
    }

    static class ViewHolder {
        TextView notes_text;

        static Button delete;
    }

    //  @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Log.i("ListViewAdapter is calling...", "calling...");
        ViewHolder holder;
        Log.i("View to be converted", "" + convertView);
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.simplerow, null);
            Log.i("View to be converted", "" + convertView);
            holder = new ViewHolder();
            holder.notes_text = (TextView) convertView.findViewById(R.id.rowTextView);

            holder.delete = (Button) convertView.findViewById(R.id.btn_minus);

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

        holder.notes_text.setText((String) list.get(position));

        holder.delete.setTag((Integer) position);

        holder.delete.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View view) {
                Integer myIntegerObject = new Integer((Integer) view.getTag());
                Log.i("Integer postioton", "" + myIntegerObject.intValue());

                list.remove(list.indexOf(list.get(myIntegerObject.intValue())));

                list_size = list.size();

                notifyDataSetChanged();
            }
        });

        return convertView;
    }
}

Solution

  • Keep a boolean flag to indicate edit mode. In ListAdapter's getView() set Button visibility to VISIBLE or GONE depending on your boolean flag.

    Now, to toggle all button visibility you have so change boolean flag, and call notifyDataSetChanged() on adapter. This will re-draw all visible List Items.

    add variable in adapter class:

    boolean editmode = false;
    

    In getView() :

    holder.delete.setVisibility( (editmode ? View.VISIBLE : View.GONE ) );
    

    finally add a method to your adapter class:

    public void setEditMode(boolean value){
      editmode = value;
      this.notifyDataSetChanged();
    }