Two lists in a linear layout

PLease will help me with the layout of two list views, vertically in a linear layout. The problem is that if list1 had more data than list2 was not visible or scrolling, using scollview is not a solution.

     <?xml version="1.0" encoding="utf-8"?>
     <LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/backrepeat"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/shape_calendar_top"
        android:orientation="horizontal" >

        <ImageView
            android:id="@+id/prevMonth"
            android:layout_width="50dp"
            android:layout_height="55dp"
            android:src="@drawable/button_events_previous" >
        </ImageView>

        <TextView
            android:id="@+id/currentMonth"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_weight="0.6"
            android:gravity="center_vertical|center_horizontal"
            android:text="Janauary"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="#d458b1"
            android:textStyle="bold" >
        </TextView>

        <ImageView
            android:id="@+id/nextMonth"
            android:layout_width="50dp"
            android:layout_height="55dp"
            android:src="@drawable/button_events_next" />
    </LinearLayout>


        <TextView
            android:id="@+id/direction_label"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_marginTop="10dp"
            android:background="#DA81F5"
            android:paddingLeft="5dp"
            android:paddingTop="5dp"
            android:text="PRESS RELEASES"
            android:textColor="#FFFFFF"
            android:textSize="13dip" />

        <ListView
            android:id="@+id/eventsList"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/direction_label"
            android:background="#ffffff" >
        </ListView>


        <TextView
            android:id="@+id/direction_label1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:background="#DA81F5"
            android:paddingLeft="5dp"
            android:paddingTop="5dp"
            android:text="SPEECHES"
            android:textColor="#FFFFFF"
            android:textSize="13dip" />

        <ListView
            android:id="@+id/eventsList1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/direction_label1"
            android:background="#ffffff" >
        </ListView>


    <TextView
        android:id="@+id/empty_list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center"
        android:text=""
        android:textAppearance="?android:attr/textAppearanceMedium" />

</LinearLayout>

      

If I use the scrollview, it completes the list view for the first line only.

Please suggest something.

EDIT:

    <?xml version="1.0" encoding="utf-8"?>

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/backrepeat"
    android:orientation="vertical" >



    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/shape_calendar_top"
        android:orientation="horizontal" >

        <ImageView
            android:id="@+id/prevMonth"
            android:layout_width="50dp"
            android:layout_height="55dp"
            android:src="@drawable/button_events_previous" >
        </ImageView>

        <TextView
            android:id="@+id/currentMonth"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_weight="0.6"
            android:gravity="center_vertical|center_horizontal"
            android:text="Janauary"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="#d458b1"
            android:textStyle="bold" >
        </TextView>

        <ImageView
            android:id="@+id/nextMonth"
            android:layout_width="50dp"
            android:layout_height="55dp"
            android:src="@drawable/button_events_next" />
    </LinearLayout>


        <TextView
            android:id="@+id/direction_label"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_marginTop="10dp"
            android:background="#DA81F5"
            android:paddingLeft="5dp"
            android:paddingTop="5dp"
            android:text="PRESS RELEASES"
            android:textColor="#FFFFFF"
            android:textSize="13dip" />

        <ListView
            android:id="@+id/eventsList"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_below="@+id/direction_label"
            android:background="#ffffff" >
        </ListView>

        <TextView
            android:id="@+id/direction_label1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:background="#DA81F5"
            android:paddingLeft="5dp"
            android:paddingTop="5dp"
            android:text="SPEECHES"
            android:textColor="#FFFFFF"
            android:textSize="13dip" />

        <ListView
            android:id="@+id/eventsList1"
            android:layout_width="fill_parent"
                 android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_below="@+id/direction_label1"
            android:background="#ffffff" >
        </ListView>

    <TextView
        android:id="@+id/empty_list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center"
        android:text=""
        android:textAppearance="?android:attr/textAppearanceMedium" />

</LinearLayout>

      

If I use this, nothing is displayed :(

Asmi

EDIT: CODE FOR TWO SHEETS:

            {
                arrayofWebData.add(cn);
                listAdapter = new SelectArralAdapter(getActivity(),
                        arrayofWebData);
                List_events.setAdapter(listAdapter);
            }

      

For the second ListView, it looks like this:

  if ((year == event_year) && (event_month == month))

            {
            arrayofWebDataPress.add(cn);
            listAdapter_press = new   SelectArralAdapter_Press(getActivity(),arrayofWebDataPress);
                List_events_press.setAdapter(listAdapter_press);
                i++;

            }

      

Array adapter for two ListViews:

     class SelectArralAdapter_Press extends ArrayAdapter<PressDB> {

    private LayoutInflater inflater;

    public SelectArralAdapter_Press(Context context,
            ArrayList<PressDB> arrayofWebDataPress) {

        super(context, R.layout.speech_list_item, R.id.event_title,
                arrayofWebDataPress);
        inflater = LayoutInflater.from(context);

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder_Press holder;
        if (convertView == null) {

            convertView = inflater.inflate(R.layout.speech_list_item, null);

            holder = new ViewHolder_Press(convertView);
            convertView.setTag(holder);

        } else {

            holder = (ViewHolder_Press) convertView.getTag();
        }
        holder.populateFrom(arrayofWebDataPress.get(position));

        return (convertView);
    }

}

  class ViewHolder_Press{
    public TextView event_name = null;
    public TextView event_date = null;

    public ViewHolder_Press(View row) {
        event_name = (TextView) row.findViewById(R.id.event_title);
        event_date = (TextView) row.findViewById(R.id.event_date_time);

    }

    void populateFrom(PressDB eventsMainDB) {
        event_name.setText(eventsMainDB.press_name);
        event_date.setText(eventsMainDB.press_date + " ");
    }
}

      

For the second adapter:

      class SelectArralAdapter extends ArrayAdapter<SpeechDB> {

    private LayoutInflater inflater;

    public SelectArralAdapter(Context context,
            ArrayList<SpeechDB> arrayofWebData) {

        super(context, R.layout.speech_list_item, R.id.event_title,
                arrayofWebData);
        inflater = LayoutInflater.from(context);

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder;
        if (convertView == null) {

            convertView = inflater.inflate(R.layout.speech_list_item, null);

            holder = new ViewHolder(convertView);
            convertView.setTag(holder);

        } else {

            holder = (ViewHolder) convertView.getTag();
        }
        holder.populateFrom(arrayofWebData.get(position));

        return (convertView);
    }

}

class ViewHolder {
    public TextView event_name = null;
    public TextView event_date = null;

    public ViewHolder(View row) {

        event_name = (TextView) row.findViewById(R.id.event_title);

        event_date = (TextView) row.findViewById(R.id.event_date_time);

    }

    void populateFrom(SpeechDB eventsMainDB) {
        event_name.setText(eventsMainDB.speech_name);

        event_date.setText(eventsMainDB.speech_date + " ");


    }

}

      

+3


source to share


5 answers


Try it.

If you want to go with the xml design, you need to specify the size of the patch, either using weight (which is most preferred) or providing the size of the patch in dp .

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/backrepeat"
    android:weightSum="1"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/shape_calendar_top"
        android:orientation="horizontal" >

        <ImageView
            android:id="@+id/prevMonth"
            android:layout_width="50dp"
            android:layout_height="55dp"
            android:src="@drawable/button_events_previous" >
        </ImageView>

        <TextView
            android:id="@+id/currentMonth"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_weight="0.6"
            android:gravity="center_vertical|center_horizontal"
            android:text="Janauary"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="#d458b1"
            android:textStyle="bold" >
        </TextView>

        <ImageView
            android:id="@+id/nextMonth"
            android:layout_width="50dp"
            android:layout_height="55dp"
            android:src="@drawable/button_events_next" />
    </LinearLayout>

    <TextView
        android:id="@+id/direction_label"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_marginTop="10dp"
        android:background="#DA81F5"
        android:paddingLeft="5dp"
        android:paddingTop="5dp"
        android:text="PRESS RELEASES"
        android:textColor="#FFFFFF"
        android:textSize="13dip" />

    <ListView
        android:id="@+id/eventsList"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="0.5"
        android:layout_below="@+id/direction_label"
        android:background="#ffffff" >
    </ListView>

    <TextView
        android:id="@+id/direction_label1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:background="#DA81F5"
        android:paddingLeft="5dp"
        android:paddingTop="5dp"
        android:text="SPEECHES"
        android:textColor="#FFFFFF"
        android:textSize="13dip" />

    <ListView
        android:id="@+id/eventsList1"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="0.5"
        android:layout_below="@+id/direction_label1"
        android:background="#ffffff" >
    </ListView>

    <TextView
        android:id="@+id/empty_list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center"
        android:text=""
        android:textAppearance="?android:attr/textAppearanceMedium" />

</LinearLayout>

      



I am getting this screen during development.

enter image description here

+2


source


You can take something like this.

<LinearLayout>
   <ScrollView>
     <LinearLayout>
       {Your All code of controls}
     </LinearLayout>
   </ScrollView>
</LinearLayout>

      



OR uo can take <ScrollView>

as parent tag.
You can do something like this. according to my Knowledge ...

0


source


I used like:

<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFF">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:gravity="center">

// first linearlayout which is holding one textview and a listview
<LinearLayout
    ">      
    <TextView 
        />        
    <ListView
        android:id="@+id/failed_list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginTop="5dp"/>
 </LinearLayout>

// second linearlayout which is holding one textview and a listview
<LinearLayout
    ">      
    <TextView 
        />        
    <ListView
        android:id="@+id/failed_list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginTop="5dp"/>
 </LinearLayout>

// third linearlayout which is holding one textview and a listview
<LinearLayout
    ">      
    <TextView 
        />        
    <ListView
        android:id="@+id/failed_list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginTop="5dp"/>
 </LinearLayout>

// and finally i have added a button in the parent linearlayout
<Button
     />

</LinearLayout>
</ScrollView>

      

you can try this.

0


source


Try the following:

Here is a solution for more than one ListView in the same layout file. You can set your layout files as the layout below by specifying equal weights for each layout inside LinearLayout

.

<LinearLayout android:layout_weight="1" 
                    android:layout_height="fill_parent" 
                    android:layout_width="fill_parent">

                <ListView   android:id="@+id/list1" 
                            android:layout_height="fill_parent" 
                            android:layout_width="fill_parent">

                </ListView>
    </LinearLayout>

<LinearLayout android:layout_weight="1" 
                android:layout_height="fill_parent" 
                android:layout_width="fill_parent">

            <ListView   android:id="@+id/list2" 
                        android:layout_height="fill_parent" 
                        android:layout_width="fill_parent">

            </ListView>
</LinearLayout>

      

Java code

public class MainActivity extends Activity {
private ListView lv1 = null;
private ListView lv2 = null;
private String s1[] = {"a", "b", "c", "d", "e", "f"};
private String s2[] = {"r", "s", "t", "u", "v", "w", "x"};

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);
    lv1 = (ListView) findViewById (R.id.list1);
    lv2 = (ListView) findViewById (R.id.list2);

    lv1.setAdapter(new ArrayAdapter<String> (this, android.R.layout.simple_list_item_1, s1));
    lv2.setAdapter(new ArrayAdapter<String> (this, android.R.layout.simple_list_item_1, s2));

} 
} 

      

For more information, you can refer to the Link who gave the solution for this.

Hope this helps you.

Thank.

0


source


I solved the problem by using section titles and combining the two lists into one list and categorizing them using section titles.

0


source







All Articles