2013-02-20 100 views
3

请帮助我在垂直放置在线性布局中的两个列表视图的布局。问题是,如果list1的数据多于list2的数据不可见且不可滚动,则使用scollview不是解决方案。线性布局中的两个ListViews

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

如果我使用scrollview,那么它仅包含第一行的listview。

请提出建议。

编辑:

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

如果我用这个,什么也看不见了:(

ASMI

编辑:CODE为两名列表视图:

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

对于第二ListView如下:

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

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

      } 

两个列表视图数组适配器:

 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 + " "); 
    } 
} 

对于第二Adaper:

 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 + " "); 


    } 

} 
+0

类似的问题在这里http://stackoverflow.com/questions/14952155/relativelayout-content-can-not-be-seen/14952256#14952256 – 2013-02-20 04:27:43

+0

哪种解决方案,你建议我试着用相对布局,它不工作 – Asmi 2013-02-20 04:38:38

+0

你可以尝试在两个'ListView'上放置'layout_weight = 1'属性,并且两者都会采用相同的比例。请记得将'layout_height'改为'0'而不是'wrap_content'。 – Aprian 2013-02-20 04:41:19

回答

0

你可以采取这样的事情。

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

或UO可以采取<ScrollView>作为父标签..
你可以做这样的事情。按我的知识......

0

我已经使用,如:

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

你可以试试这个。

+0

我添加了Java代码 – Asmi 2013-02-20 05:25:53

2

试试这个。

如果你想要去的XML设计,那么你必须给固定大小,无论是通过使用重量(这是最优先)或在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> 

我得到这个屏幕在设计时。

enter image description here

+0

如果我使用这个,没有任何显示:( – Asmi 2013-02-20 05:09:43

+0

现在在Listview中没有显示任何值,它们是空的 – Asmi 2013-02-20 05:12:08

+0

你的意思是当你运行这个代码,那么你正面临着这个问题 – 2013-02-20 05:13:05

0

试用如下:

这里是相同的布局文件中的溶液,以一个以上的ListView。您可以通过为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代码的

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)); 

} 
} 

欲了解更多详细信息,您可以参考已经给出了相同的解决方案Link

我希望它能帮助你。

谢谢。

+0

显示我将两个相对布局合并为一个东西 – Asmi 2013-02-20 05:17:58

+0

查看我的更新答案 – GrIsHu 2013-02-20 06:02:42

+0

这使得屏幕分为两部分,一个用于1个listview,另一个用于其他one1,每个部分H大大自己的listview滚动,我可以有像整体布局滚动而不是单独滚动的列表视图。因此,一旦listview1完成Listview2启动 – Asmi 2013-02-20 06:18:03

0

我解决了这个问题,使用节标题并将两个listviews结合到一个listview中,并通过Section标题的帮助对它们进行分类。