salih
salih

Reputation: 725

How to change visibility of button in custom listview item layout

I have listview with custom layout, each layout has one TextView, one Seekbar and one Button. All I want to do is when I click the Edit button, all buttons inside custom layout become visible. I use notifyDataSetChanged after click the edit button, nothing was changed.

Here my code snippets.

In CustomAdapter I define one method, boolean flag and getView method;

public class NavigationDrawerListViewAdapter extends BaseAdapter {
  boolean editmode = false;

  @Override
 public View getView(final int position, View convertView, final ViewGroup parent) {
    final ViewHolder holder;
    if (convertView == null) {
    holder.mButton=(Button)convertView.findViewById(R.id.button2);
    holder.mButton.setVisibility( (editmode ? View.VISIBLE : View.INVISIBLE ) );
  }
}


}



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

}

My ListViewActivity Class;

editLayers = (Button) rootview.findViewById(R.id.editLayersButton);
editLayers.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (editLayers.getText().equals("Düzenle")) {
                    myAdapter.setEditMode(true);
                    editLayers.setText("Tamam");


                } else {
                    myAdapter.setEditMode(false);
                    editLayers.setText("Düzenle");



                }


            }


        });

Thanks in advance.

enter image description here

Upvotes: 1

Views: 491

Answers (2)

The Original Android
The Original Android

Reputation: 6215

There is a bug in getView(), need to create an instance for object holder.

Suggested code:

@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
    final ViewHolder holder;
    if (convertView == null) {
       holder = new ViewHolder();
       ...
    }

Notice holder = new.

Upvotes: 1

Amsheer
Amsheer

Reputation: 7131

Change this

if (convertView == null) {
    holder.mButton=(Button)convertView.findViewById(R.id.button2);
convertView.setTag(holder);
  }else{
holder = (ViewHolder) convertView.getTag();
}

And then write. Move the following code outside of if.. else...

 holder.mButton.setVisibility( (editmode ? View.VISIBLE : View.INVISIBLE ) );

Upvotes: 1

Related Questions