【问题标题】:Listview 5 "items" horizontal with a vertical scroll AndroidListview 5“项目”水平与垂直滚动Android
【发布时间】:2013-09-13 19:36:51
【问题描述】:

我想知道如何制作一个ListView,每行有 5 个项目,水平滚动,垂直滚动

【问题讨论】:

  • 取一个 5 列的 GridView 而不是 Listview。

标签: android android-listview vertical-scrolling


【解决方案1】:

您需要创建一个自定义行,然后有 60 行。

假设你有一个

ArrayList<String> cars 

汽车数据。

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {  
       //Determine the first car
       int firstCarPosition = position*5;
       CarListItem item = new CarListItem(context);
       item.fillItem(firstCarPosition);
       return item;
    }

然后创建一个像这样的类

public class CarListItem extends LinearLayout {

  public SingleRowListItem(Context context) {
    super(context);
    LayoutInflater inflater =     (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    inflater.inflate(R.layout.list_item_cars_row, this, true);
  }

 public void fillItem(int firstPosition)
 {
     TextView car1 = (TextView)findViewById(R.id.car1);
     TextView car2 = (TextView)findViewById(R.id.car2);
     TextView car3 = (TextView)findViewById(R.id.car3);
     TextView car4 = (TextView)findViewById(R.id.car4);
     TextView car5 = (TextView)findViewById(R.id.car5);

     car1.setText(cars.get(firstPosition);
     car2.setText(cars.get(firstPosition+1);
     car3.setText(cars.get(firstPosition+2);
     car4.setText(cars.get(firstPosition+3);
     car5.setText(cars.get(firstPosition+4);
 }
}

最后,创建一个名为 list_item_car_row 的 XML:

<?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="60dp"
android:background="@drawable/standard_background"
android:orientation="horizontal"
>
    <TextView
    android:id="@+id/car1"
    android:layout_height="wrap_content"
    android:layout_weight="wrap_content"/>
    <TextView
    android:id="@+id/car2"
    android:layout_height="wrap_content"
    android:layout_weight="wrap_content"/>
    <TextView
    android:id="@+id/car3"
    android:layout_height="wrap_content"
    android:layout_weight="wrap_content"/>
    <TextView
    android:id="@+id/car4"
    android:layout_height="wrap_content"
    android:layout_weight="wrap_content"/>
    <TextView
    android:id="@+id/car5"
    android:layout_height="wrap_content"
    android:layout_weight="wrap_content"/>  
</LinearLayout>

这就是所谓的组件,不是系统默认项。该组件基于 6 个文本视图。编辑 XML,添加更多数据并制作一个很酷的 :)

【讨论】:

    【解决方案2】:

    据我所知,您想制作一个普通的 ListView 垂直滚动,但在每一行中您也希望水平滚动。

    用你喜欢的任何适配器制作普通的ListView,但设计项目布局如下:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
    
        <HorizontalScrollView
            android:id="@+id/hor_scroll"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
    
            <LinearLayout
                android:id="@+id/lin"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
    
                <ImageView
                    android:id="@+id/icon"
                    android:layout_width="wrap_content"
                    android:layout_height="fill_parent"
                    android:layout_marginRight="6.0dip"
                    android:layout_alignParentTop="true"
                    android:layout_alignParentBottom="true"
                    android:focusable="false" />
    
                <TextView
                    android:textAppearance="?android:textAppearanceMedium"
                    android:gravity="center_vertical"
                    android:id="@+id/text"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:singleLine="true"
                    android:layout_toRightOf="@id/icon"
                    android:layout_alignParentTop="true"
                    android:layout_alignParentBottom="true" />
    
            </LinearLayout>
    
        </HorizontalScrollView>
    
    
    </RelativeLayout>
    

    您将拥有 Vertically Scrollable ListView 和水平滚动标签项。

    【讨论】:

    • @jilbera。那么,如何仅在列表项未水平滚动时才可见一项?
    • 抱歉@GauravArora,我无法理解你的问题。
    • 我有 10 行,有些行有多个数据,我必须使用水平滚动显示这些数据,但滚动时应该只有一个数据可见。
    • 哦,这是一个不同的问题,我认为您应该在项目行视图中使用 ListView ,它可以水平滚动,但我不知道这是否可能。 . .
    【解决方案3】:

    您必须使用自定义 ListAdapter 创建一个垂直 ListView,每行包含 5 个项目。您可以在 XML 布局文件中描述行的布局。例如见http://www.survivingwithandroid.com/2012/10/android-listview-custom-adapter-and.html

    【讨论】:

    • 我可能解释得不好。例如,我需要从 300 辆汽车的列表中找到每排 5 辆汽车,每辆汽车都有他的描述、名称、颜色……你明白吗?
    • GridView 垂直滚动? stackoverflow.com/questions/12456711/…
    【解决方案4】:

    你需要创建一个带有 Listview 的布局文件

    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    

    然后在代码中,您需要一个 ArrayAdapter(我总是创建自己的!)来填充您的列表和每个项目的 item_layout

    arrayAdapter = new ArrayAdapter(getActivity().getApplicationContext(), R.layout.item_layout, someArrayList);
            ListView lv = (ListView) view.findViewById(R.id.list);
            lv.setAdapter(arrayAdapter );
    

    【讨论】:

    • 这不是我想要的。我的列表视图每行必须有 5 辆“汽车”,垂直滚动必须有 300 行。我不知道该怎么做。如果可能,编写 XML 和适配器类。非常感谢
    • 喜欢这个 |Car1|Car2|Car3|Car4|Car5|然后它下面的 300 行看起来像它??