Reputation: 725
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.
Upvotes: 1
Views: 491
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
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