diff --git a/src/org/kreed/vanilla/AbstractAdapter.java b/src/org/kreed/vanilla/AbstractAdapter.java index 059cc729..0d91dc34 100644 --- a/src/org/kreed/vanilla/AbstractAdapter.java +++ b/src/org/kreed/vanilla/AbstractAdapter.java @@ -30,6 +30,7 @@ import android.util.DisplayMetrics; import android.util.TypedValue; import android.view.View; import android.view.ViewGroup; +import android.view.View.OnClickListener; import android.widget.BaseAdapter; import android.widget.Filter; import android.widget.Filterable; @@ -39,7 +40,6 @@ import android.widget.TextView; public abstract class AbstractAdapter extends BaseAdapter implements Filterable { public static final int ONE_LINE = 0x1; - public static final int NO_EXPANDER = 0x2; private Context mContext; private List mObjects; @@ -49,6 +49,7 @@ public abstract class AbstractAdapter extends BaseAdapter implements Filterable private int mPadding; private int mDrawFlags; private int mFieldCount; + private OnClickListener mExpanderListener; public AbstractAdapter(Context context, Song[] allObjects, int drawFlags, int numFields) { @@ -62,6 +63,11 @@ public abstract class AbstractAdapter extends BaseAdapter implements Filterable mPadding = (int)mSize / 2; } + public void setExpanderListener(View.OnClickListener listener) + { + mExpanderListener = listener; + } + @Override public boolean hasStableIds() { @@ -84,7 +90,7 @@ public abstract class AbstractAdapter extends BaseAdapter implements Filterable RelativeLayout.LayoutParams params; - if ((mDrawFlags & NO_EXPANDER) == 0) { + if (mExpanderListener != null) { params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); params.addRule(RelativeLayout.CENTER_VERTICAL); @@ -93,6 +99,10 @@ public abstract class AbstractAdapter extends BaseAdapter implements Filterable button.setImageResource(R.drawable.expander_arrow); button.setId(3); button.setLayoutParams(params); + button.setTag(R.id.list, mFieldCount); + button.setTag(R.id.song, get(position)); + button.setOnClickListener(mExpanderListener); + view.addView(button); } diff --git a/src/org/kreed/vanilla/SongAdapter.java b/src/org/kreed/vanilla/SongAdapter.java index 487fe519..fb7111e0 100644 --- a/src/org/kreed/vanilla/SongAdapter.java +++ b/src/org/kreed/vanilla/SongAdapter.java @@ -32,7 +32,7 @@ public class SongAdapter extends AbstractAdapter { public SongAdapter(Context context, Song[] allSongs) { - super(ContextApplication.getContext(), sort(allSongs), NO_EXPANDER, 3); + super(ContextApplication.getContext(), sort(allSongs), 0, 3); } @Override diff --git a/src/org/kreed/vanilla/SongSelector.java b/src/org/kreed/vanilla/SongSelector.java index d9b0d47d..70e53813 100644 --- a/src/org/kreed/vanilla/SongSelector.java +++ b/src/org/kreed/vanilla/SongSelector.java @@ -63,8 +63,10 @@ public class SongSelector extends TabActivity implements AdapterView.OnItemClick final Song[] songs = Song.getAllSongMetadata(); mAdapters[0] = new ArtistAdapter(this, songs); + mAdapters[0].setExpanderListener(this); ListView artistView = (ListView)findViewById(R.id.artist_list); + artistView.setOnItemClickListener(this); artistView.setAdapter(mAdapters[0]); mTextFilter = (TextView)findViewById(R.id.filter_text); @@ -87,11 +89,11 @@ public class SongSelector extends TabActivity implements AdapterView.OnItemClick public void run() { mAdapters[1] = new AlbumAdapter(SongSelector.this, songs); - mAdapters[2] = new SongAdapter(SongSelector.this, songs); - + mAdapters[1].setExpanderListener(SongSelector.this); ListView albumView = (ListView)findViewById(R.id.album_list); albumView.setAdapter(mAdapters[1]); + mAdapters[2] = new SongAdapter(SongSelector.this, songs); ListView songView = (ListView)findViewById(R.id.song_list); songView.setAdapter(mAdapters[2]); songView.setOnItemClickListener(SongSelector.this); @@ -133,6 +135,12 @@ public class SongSelector extends TabActivity implements AdapterView.OnItemClick public void onClick(View view) { - mTextFilter.setText(""); + if (view == mTextFilter) { + mTextFilter.setText(""); + } else { + Object list = view.getTag(R.id.list); + if (list != null) + mTabHost.setCurrentTab((Integer)list); + } } } \ No newline at end of file