如何在android中实现修复栏布局

如何在android中实现修复栏布局,android,Android,我想创建如下布局: <RelativeLayout> <RelativeLayout id="fixed"> </RelativeLayout> <ScrollView> <RelativeLayout> <Button... <ListView.... <Button... <

我想创建如下布局:

<RelativeLayout>
    <RelativeLayout id="fixed">
    </RelativeLayout>
    <ScrollView>
        <RelativeLayout>
            <Button...
            <ListView....
            <Button...
            </RelatievLayout>
    </ScrollView>
</RelativeLayout>

我认为
滚动视图
是必要的,可能是这样的:

<RelativeLayout>
    <RelativeLayout id="fixed">
    </RelativeLayout>
    <ScrollView>
        <RelativeLayout>
            <Button...
            <ListView....
            <Button...
            </RelatievLayout>
    </ScrollView>
</RelativeLayout>

第一个想法(不推荐):在
滚动视图
中添加
列表视图
是个坏主意,因为默认情况下这两个视图都是可滚动的。您可以使用
线性布局
而不是
列表视图
,并为项目创建自定义onClickListener

<Scrollview>
   <Button.../>
   <LinearLayout>
     <items.../>
   </LinearLayout>
</Scrollview>

第二个想法(推荐)是使用一个
ListView
并创建一个自定义适配器,扩展
BaseAdapter
为每行返回
视图并保存数据。这意味着将按钮和项目添加到
列表视图中
,并创建一个自定义的
OnClickListener
和适配器来容纳您的模型。这是我用过的方法,我会用这种方法再做一次

如果要安装适配器,则需要覆盖:

getViewTypeCount
-不同行布局的类型数

getItemViewType
行的类型

getView
返回某个位置的视图,在这里您需要放大布局并设置数据

如何创建具有不同行类型的列表视图。

第一个想法(不推荐):在
滚动视图
中添加
列表视图
是个坏主意,因为默认情况下两者都是可滚动的。您可以使用
线性布局
而不是
列表视图
,并为项目创建自定义onClickListener

<Scrollview>
   <Button.../>
   <LinearLayout>
     <items.../>
   </LinearLayout>
</Scrollview>

第二个想法(推荐)是使用一个
ListView
并创建一个自定义适配器,扩展
BaseAdapter
为每行返回
视图并保存数据。这意味着将按钮和项目添加到
列表视图中
,并创建一个自定义的
OnClickListener
和适配器来容纳您的模型。这是我用过的方法,我会用这种方法再做一次

如果要安装适配器,则需要覆盖:

getViewTypeCount
-不同行布局的类型数

getItemViewType
行的类型

getView
返回某个位置的视图,在这里您需要放大布局并设置数据

如何使用不同类型的行创建ListView。

这是xml代码

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

    <ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <LinearLayout android:id="@+id/rlt"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" >


        </LinearLayout>
    </ScrollView>



</RelativeLayout>

Java代码

LinearLayout llt = (LinearLayout)findViewById(R.id.rlt);
    for(int i=0;i<12;i++)
    {
        final int k =i;
        LinearLayout ll = new LinearLayout(this);
        ll.setId(i);
        ll.setOrientation(LinearLayout.VERTICAL);
        TextView tv = new TextView(this);
        tv.setText(" name:"+i);
        ll.addView(tv);
        ll.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                // TODO Auto-generated method stub
                System.out.println("This is the printed text no"+k);
            }
        });
        //ll.setBackgroundColor(Color.BLACK);
    llt.addView(ll);
     }
LinearLayout llt=(LinearLayout)findViewById(R.id.rlt);
对于(inti=0;i这是xml代码

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

    <ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <LinearLayout android:id="@+id/rlt"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" >


        </LinearLayout>
    </ScrollView>



</RelativeLayout>

Java代码

LinearLayout llt = (LinearLayout)findViewById(R.id.rlt);
    for(int i=0;i<12;i++)
    {
        final int k =i;
        LinearLayout ll = new LinearLayout(this);
        ll.setId(i);
        ll.setOrientation(LinearLayout.VERTICAL);
        TextView tv = new TextView(this);
        tv.setText(" name:"+i);
        ll.addView(tv);
        ll.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                // TODO Auto-generated method stub
                System.out.println("This is the printed text no"+k);
            }
        });
        //ll.setBackgroundColor(Color.BLACK);
    llt.addView(ll);
     }
LinearLayout llt=(LinearLayout)findViewById(R.id.rlt);

对于(int i=0;i在listview中有什么?从服务器上搜索的数据列表。那么为什么不使用linerlayout而不是listview?你的意思是添加一个
LinearLayout
并将
listview
放在里面?如果没有,要显示的数据是
ArrayList
,如果不需要,使用
LinearLayout
o使用ListView然后你需要将文本视图添加到Linearlayout并打印其中的数据。但是为什么你不想使用ListView?ListView中有什么?从服务器搜索的数据列表。那么为什么不使用linerlayout而不是ListView?你的意思是添加一个
Linearlayout
并将
ListView
放在其中?如果没有,则将数据添加到b显示的是一个
ArrayList
,使用
LinearLayout
是否合适?如果不想使用ListView,则需要将textview添加到LinearLayout并打印其中的数据。但为什么不想使用ListView呢?事实上,我使用的是第二种方法,我有自己的适配器扩展
ArrayAdapter
,我只覆盖对于
getView
方法,我从不使用
getViewTypeCount
getItemViewType
,我会尝试一下。但是,在我的示例中,
按钮1
按钮2
列表视图
没有任何关系,所以将它们添加到自定义适配器中是一个好主意?这样按钮就在滚动条中了是的。如果适配器处理正确,混合不同的内容是可以的。事实上,我使用的是第二种方法,我有自己的适配器扩展
ArrayAdapter
,我只覆盖
getView
方法,我从不使用
getViewTypeCount
getItemViewType
,我会尝试一下。但是,
按钮n1
按钮n2
在我的示例中与
列表视图
无关,因此将它们添加到自定义适配器中是一个好主意?这样按钮就位于可滚动的are中。如果适配器处理正确,混合不同的内容是可以的。