如何在android中滚动LinearLayout与ListView结合使用

时间:2014-11-30 18:08:28

标签: android listview scroll android-linearlayout

我正在开发一个Android应用程序。

我将LinearLayout放在ListView上。我想将LinearLayout与ListView一起滚动。

我的xml在下面。

你能告诉我如何实现上述目标吗?

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

    <LinearLayout
        android:id="@+id/header1"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:layout_margin="3dp"
        android:choiceMode="singleChoice"
        android:orientation="vertical" >

    ・・・

    </LinearLayout>

    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:choiceMode="singleChoice" />

</LinearLayout>

3 个答案:

答案 0 :(得分:1)

你不应该将一个ListView放在ScrollView中,因为它非常昂贵并且违背了ListView的目的。改为使用LinearLayout / RelativeLayout。

如果您想使用LinearLayout填充ListView项,则需要创建一个将获取数据并填充listView的适配器。

以下是一些采用String值并在列表中显示它们的代码。

public class MySimpleArrayAdapter extends ArrayAdapter<String> {
  private final Context context;
  private final String[] values;

  public MySimpleArrayAdapter(Context context, String[] values) {
    super(context, R.layout.rowlayout, values);
    this.context = context;
    this.values = values;
  }

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View rowView = inflater.inflate(R.layout.rowlayout, parent, false);
    TextView textView = (TextView) rowView.findViewById(R.id.label);
    ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
    textView.setText(values[position]);
    // change the icon for Windows and iPhone
    String s = values[position];
    if (s.startsWith("iPhone")) {
      imageView.setImageResource(R.drawable.no);
    } else {
      imageView.setImageResource(R.drawable.ok);
    }

    return rowView;
  }
} 

在getView中给rowlayout充气的地方 - 这将是你的LinearLayout。

http://www.vogella.com/tutorials/AndroidListView/article.html#androidlists_adapterintro - 了解更多信息。

答案 1 :(得分:0)

使用ScrollView(示例):

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"

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

            <LinearLayout
                android:id="@+id/header1"
                android:layout_width="match_parent"
                android:layout_height="100dp"
                android:layout_margin="3dp"
                android:choiceMode="singleChoice"
                android:orientation="vertical" >

・・・

        </LinearLayout>

        <ListView
            android:id="@android:id/list"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:choiceMode="singleChoice" />

        </LinearLayout>
    </RelativeLayout>
</ScrollView>

请记住,ScrollView只能有一个子属性,所以你可以f.e.使用相对布局来封装LinearLayout和ListView

答案 2 :(得分:0)

ListView有自己的ScrollView,如果要滚动LinearLayout,请遵循此代码。

  • 将Scroll-view声明为父级,并在其中仅声明一个子Linearlayout(Scrollview只包含一个子级)
  • 在Linearlayout中声明您想要的内容。

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:tools="http://schemas.android.com/tools"
       android:layout_width="match_parent"
       android:layout_height="match_parent"> 
    <LinearLayout
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:orientation="vertical" >
    
    <LinearLayout
        android:id="@+id/header1"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:layout_margin="3dp"
        android:choiceMode="singleChoice"
        android:orientation="vertical" >
        .
        .
        .
    
    </LinearLayout>
    
    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:choiceMode="singleChoice" />
    </LinearLayout>
    </ScrollView>