Skip to content

Instantly share code, notes, and snippets.

@sevar83
Created January 29, 2016 14:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sevar83/0e27c26142f2fba97d57 to your computer and use it in GitHub Desktop.
Save sevar83/0e27c26142f2fba97d57 to your computer and use it in GitHub Desktop.
ListLayout - a LinearLayout getting its items from Adapter. Very simple alternative of RecyclerView when a nested list is needed. It wraps its content with just setting wrap_content as height easily in constrast of RecyclerView.
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import android.content.Context;
import android.database.DataSetObserver;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Adapter;
import android.widget.LinearLayout;
public class ListLayout extends LinearLayout {
private Adapter mAdapter;
private Observer mObserver = new Observer();
public ListLayout(Context context) {
super(context);
}
public ListLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ListLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public Adapter getAdapter()
{
return mAdapter;
}
public void setAdapter(Adapter adapter) {
if (mAdapter != null)
mAdapter.unregisterDataSetObserver(mObserver);
mAdapter = adapter;
adapter.registerDataSetObserver(mObserver);
mObserver.onChanged();
}
private class Observer extends DataSetObserver {
@Override
public void onChanged() {
final List<View> oldViews = new ArrayList<View>(getChildCount());
for (int i = 0; i < getChildCount(); i++)
oldViews.add(getChildAt(i));
final Iterator<View> iter = oldViews.iterator();
removeAllViews();
for (int i = 0; i < mAdapter.getCount(); i++) {
View convertView = iter.hasNext() ? iter.next() : null;
View newView = mAdapter.getView(i, convertView, ListLayout.this);
addView(newView);
}
super.onChanged();
}
@Override
public void onInvalidated() {
removeAllViews();
super.onInvalidated();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment