I want to populate two listviews in one activity. For that i placed two listviews in one layout. My problem is that both listviews are populated but only one listview is visible. Now when i make one layout INVISIBLE, it will display another listview.
Here i am posting my xml file. Is there any problem in my layout ? Please suggest solution.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:paddingTop="10dp"
android:id="@+id/playlist_lyt"
>
<Button
android:id="@+id/btnAlbumwise"
android:text="View Albumwise"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<RelativeLayout
android:id="@+id/layout_songlist"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:paddingTop="10dp"
android:layout_below="@+id/layout_albumlist"
>
<EditText android:id="@+id/inputSearch"
android:layout_width="fill_parent"
android:layout_height="33dp"
android:hint="Search.."
android:inputType="textVisiblePassword"
android:cursorVisible="false"
android:background="@drawable/rounded_edittext"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
/>
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:divider="#000000"
android:dividerHeight="4dp"
android:listSelector="@drawable/list_selector"
android:layout_below="@+id/inputSearch"
android:paddingTop="8dp"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/layout_albumlist"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:paddingTop="10dp"
android:layout_below="@+id/btnAlbumwise"
>
<ListView
android:id="@+id/liist"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:divider="#242424"
android:dividerHeight="1dp"
android:listSelector="@drawable/list_selector"
/>
</RelativeLayout>
</RelativeLayout>
Code to populate listview "liist". PlaylistActivity.java
Cursor cursor1 = managedQuery(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, null,null, null, null);
if (cursor1 == null)
{
//Query Failed , Handle error.
}
else if (!cursor1.moveToFirst())
{
//No media on the device.
}
else
{
// int albumName = cursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM);
int id = cursor1.getColumnIndex(MediaStore.Audio.Albums._ID);
int albumartist = cursor1.getColumnIndex(MediaStore.Audio.Albums.ARTIST);
for(int i=0;i<cursor1.getCount();i++)
{
String Name = cursor1.getString(cursor1.getColumnIndex(MediaStore.Audio.Albums.ALBUM));
Integer albumid = cursor1.getInt(id);
String artist = cursor1.getString(albumartist);
Bitmap bitmap = null;
bitmap = getArtwork(context, albumid);
lstImage.add(bitmap);
lstName.add(Name);
lstArtist.add(artist);
cursor1.moveToNext();
}
}
cursor1.close();
rowItems = new ArrayList<RowItem>();
for (int i = 0; i < lstName.size(); i++) {
RowItem item = new RowItem(lstImage.get(i), lstName.get(i) , lstArtist.get(i));
rowItems.add(item);
}
CustomListViewAdapter adapter = new CustomListViewAdapter(PlayListActivity.this,
R.layout.list_item, rowItems);
lv1.setAdapter(adapter);
lv1.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
RowItem item = rowItems.get(position);
String title = item.getTitle();
Intent in = new Intent(PlayListActivity.this,AlbumsongListActivity.class);
// Sending songIndex to PlayerActivity
in.putExtra("albumTitle", title);
in.putExtra("list", 0);
in.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(in);
}
});
Now when i click on item it starts another activity Albumsonglistactivity.java
public class AlbumsongListActivity extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] from = { "songTitle", "artist" };
int[] to = { R.id.album_songTitle, R.id.album_songArtist };
adapter = new SimpleAdapter(this, getAlbumSongList(context),
R.layout.albumsonglist_item, from, to)
{
public long getItemId(int position)
{
return songsListData.indexOf(getItem(position));
}
};
setListAdapter(adapter);
ListView lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View view,
int position, long id)
{
// getting listitem index
int songIndex = (int) id;
// Starting new intent
Intent in = new Intent(getApplicationContext(),MusicPlayertemp.class);
in.putExtra("songIndex", songIndex);
in.putExtra("albumtitle", albumName);
in.putExtra("listFlag", 3);
startActivity(in);
}
});
}
public ArrayList<HashMap<String, String>> getAlbumSongList(Context c)
{
String whereClause = MediaStore.Audio.Media.ALBUM + " = ? ";
String s[] = new String[] { albumName };
Cursor cursor = c.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, whereClause,s, MediaStore.Audio.Media.TITLE);
if (cursor == null)
{
// Query Failed , Handle error.
}
else if (!cursor.moveToFirst())
{
// No media on the device.
}
else
{
int titleColumn = cursor.getColumnIndex(android.provider.MediaStore.Audio.Media.TITLE);
int idColumn = cursor.getColumnIndexOrThrow(android.provider.MediaStore.Audio.Media.DATA);
int artistcolumn = cursor.getColumnIndex(android.provider.MediaStore.Audio.Media.ARTIST);
albumid = cursor.getInt(cursor.getColumnIndex(android.provider.MediaStore.Audio.Media.ALBUM_ID));
int id = cursor.getColumnIndex(android.provider.MediaStore.Audio.Media._ID);
for (int i = 0; i < cursor.getCount(); i++)
{
String thisTitle = cursor.getString(titleColumn);
String path = cursor.getString(idColumn);
String artist = cursor.getString(artistcolumn);
String ID = cursor.getString(id);
HashMap<String, String> song = new HashMap<String, String>();
song.put("songTitle", thisTitle);
song.put("songPath", path);
song.put("artist", artist);
song.put("id", ID);
// Adding each song to SongList
songsList.add(song);
cursor.moveToNext();
}
}
// looping through playlist
for (int i = 0; i < songsList.size(); i++)
{
// creating new HashMap
HashMap<String, String> song = songsList.get(i);
// adding HashList to ArrayList
songsListData.add(song);
}
return songsListData;
}
In albumsonglistActivity, if i click on item it doesn't invoked..
This is the problem because you are setting another layout below the first one and first one takes height to fill_parent.
You should use Linear Layout and put both listview inside that and use layout_weight property to make both listview same height.
For example you can follow below hierarchy. Its not original code but it just a structure which you can use to develop your layout
<LinearLayout orientation="verical">
<ListView layout_weight=1></ListView>
<ListView layout_weight=1></ListView>
</LinearLayout>
you have given android:layout_height="fill_parent"
to both Relative layout. this is why you are unable to show both listviews.
use linear layout and By using weight you can divide the screen for displaying both listviews
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With