0

我有一个旨在位于切换按钮下方的列表。该列表从服务器获取数据,然后解析它们。我的 XML 如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <ToggleButton
        android:id="@+id/toggle_button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:textOff="Apps"
        android:textOn="Apps" />

    <ToggleButton
        android:id="@+id/toggle_button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/toggle_button1"
        android:layout_weight="1"
        android:textOff="VMs"
        android:textOn="VMs" />

    <ToggleButton
        android:id="@+id/toggle_button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/toggle_button2"
        android:layout_weight="1"
        android:textOff="Groups"
        android:textOn="Groups" />

    <ListView
        android:id="@+id/mylist"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/toggle_button1" />
</RelativeLayout>

实际片段的代码:

public class ProblemFragment extends SherlockListFragment
{
    private SeparatedListAdapter list;

    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        this.getSherlockActivity().setContentView(R.layout.problem_layout);

        list = new SeparatedListAdapter(this.getSherlockActivity(), new Layout(R.layout.separated_list_adapter_two_text, R.id.two_text_title, R.id.two_text_desc));
        ToggleButton b1 = (ToggleButton) this.getSherlockActivity().findViewById(R.id.toggle_button1);
        ToggleButton b2 = (ToggleButton) this.getSherlockActivity().findViewById(R.id.toggle_button2);
        ToggleButton b3 = (ToggleButton) this.getSherlockActivity().findViewById(R.id.toggle_button3);

        setListAdapter(list);
        refresh();
    }

    public void refresh()
    {
        list = new SeparatedListAdapter(this.getSherlockActivity(), new Layout(R.layout.separated_list_adapter_two_text, R.id.two_text_title, R.id.two_text_desc));
        refreshStats();
    }

    public void refreshStats()
    {
        //Omitted parsing code

        list.addSection(new String("Hello world!!"));
        setListAdapter(list);
    }
}

但是,当我使用 setListAdapter(list) 时,按钮会被覆盖。它们在应用程序检索数据并解析它之前是可见的,但是在我调用 setListAdapter 之后它们会被覆盖。我怎样才能解决这个问题?

4

2 回答 2

2

首先,删除

 android:orientation="horizontal"

从你的根layoutRelativeLayout没有orientation财产。此外,weight对于 a 的子元素,LinearLayout当您使用它时,您应该将width每个子视图的分配0dp给水平orientationheight="0dp"垂直orientation

然后将你的包装ToggleButtons在 a LinearLayout,vertical 或 Horizo​​ntal中orientation,并给它属性

android:layout_alignParentTop="true"

然后给你ListView的财产

android:layout_below="@id/idOfLinearLayout"

所以它可能看起来像

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <LinearLayout
         android:id="@+id/toggleLL"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_alignParentTop="true">
    <ToggleButton
        android:id="@+id/toggle_button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textOff="Apps"
        android:textOn="Apps" />

    <ToggleButton
        android:id="@+id/toggle_button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textOff="VMs"
        android:textOn="VMs" />

    <ToggleButton
        android:id="@+id/toggle_button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textOff="Groups"
        android:textOn="Groups" />
    </LinearLayout>
    <ListView
        android:id="@+id/mylist"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/toggleLL" />
</RelativeLayout>

我还从 中删除了RelativeLayout属性,ToggleButtons因为它们现在包含在LinearLayout. 而且你有一个循环视图错误,将第二个分配ToggleButton到自身的右侧,这可能是一个复制/粘贴错误。希望这可以帮助。

请注意,a 的默认值orientationLinearLayout这样的horizontal,因此将该属性排除在外会给您带来这种效果。

于 2013-08-12T22:10:21.140 回答
0

哦!我无法测试您的 XML,但我认为您需要滚动条!如果列表中有很多条目,屏幕会变大,使按钮消失,因为它们被列表向上。尝试在整个布局中添加滚动条。

像这样的东西:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   xmlns:android="http://schemas.android.com/apk/res/android">
   <ScrollView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

               <!-- Original layout here -->

   </ScrollView>
</LinearLayout>

当然,如果你只是在滚动视图里面放了一个布局,就不需要外层布局了:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    xmlns:android="http://schemas.android.com/apk/res/android">

               <!-- Original layout here -->

</ScrollView>
于 2013-08-12T22:44:07.723 回答