Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Multiple listviews in one layout android

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..

like image 872
Zankhna Avatar asked Jan 17 '13 11:01

Zankhna


2 Answers

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>
like image 80
Dharmendra Avatar answered Nov 02 '22 07:11

Dharmendra


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

like image 3
Ram kiran Pachigolla Avatar answered Nov 02 '22 06:11

Ram kiran Pachigolla