简单的ListLiew有2列?

时间:2015-05-21 23:52:17

标签: android listview android-listview

我正在尝试设置一个包含2列的简单列表视图,我只想保留一个名称和年龄。我认为可以使用网格视图,但我不知道需要保留多少名称,以及网格视图是否可滚动。我为我的代码道歉我有一个列列表视图,以几种不同的方式工作,现在到处都是。我只是放了一些东西,所以你们不认为我没有尝试过,我已经被困了一天半了,而且我没有到达任何地方。我无法在任何地方找到一个简单的多列listview示例的好例子。

     ArrayAdapter adapter = new ArrayAdapter<String>(this,
              R.layout.list11, minu);

              ListView listView = (ListView) findViewById(R.id.country_list);
              listView.setAdapter(adapter);









<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
     android:weightSum="100"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >




    <LinearLayout
        android:id="@+id/fskdumnn"
         android:orientation="horizontal"
         android:background="#CC0000"
        android:gravity="center_horizontal"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" >

     </LinearLayout>




     <LinearLayout
        android:id="@+id/fsvumnn"
         android:orientation="horizontal"
         android:background="#CC0000"
        android:gravity="center_horizontal"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="6" >



            <TextView
            android:id="@+id/tekxw1"
            android:layout_width="0dp"

            android:layout_weight="2"
            android:layout_height="match_parent"
            android:text=""
            android:textAppearance="?android:attr/textAppearanceLarge" />




         <TextView
            android:id="@+id/jmnxx"
            android:layout_width="0dp"
            android:textStyle="bold|italic"
            android:shadowDx="1.6"
            android:shadowDy="1.6"
            android:gravity="center_vertical|center_horizontal"
            android:shadowRadius="2.0"
            android:shadowColor="#FFADD6"
            android:layout_weight="44"
            android:layout_height="match_parent"
            android:text="Name"
            android:textAppearance="?android:attr/textAppearanceLarge" />


         <TextView
            android:id="@+id/jcxxx"
            android:layout_width="0dp"
             android:gravity="center_vertical|center_horizontal"
            android:layout_weight="44"
            android:layout_height="match_parent"
            android:text="Age"
            android:textAppearance="?android:attr/textAppearanceLarge" />


  <TextView
            android:id="@+id/jcfxx"
            android:layout_width="0dp"

            android:layout_weight="2"
            android:layout_height="match_parent"
            android:text=""
            android:textAppearance="?android:attr/textAppearanceLarge" />

 </LinearLayout>


      <LinearLayout
        android:id="@+id/fhfdmnn"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="90"
        android:background="#ED69AB"
        android:orientation="horizontal"
        android:weightSum="100" >


        <TextView
            android:id="@+id/jmacxsnxx"
            android:layout_width="0dp"
            android:layout_weight="2"
            android:layout_height="match_parent"
            android:text=""
           android:background="#CC0000"
            android:textAppearance="?android:attr/textAppearanceLarge" />


           <ListView
           android:id="@+id/country_list"
           android:layout_weight="96"
           android:layout_width="0dp"
           android:layout_height="wrap_content" >
          </ListView>




     <TextView
            android:id="@+id/jmbfcnxx"
            android:layout_width="0dp"
            android:layout_weight="2"
            android:layout_height="match_parent"
            android:text=""
            android:background="#CC0000"
            android:textAppearance="?android:attr/textAppearanceLarge" />




     </LinearLayout>


    </LinearLayout>  

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找的是Custom ListView。它基本上是一个listView,但是您提供了自己的行布局(因此,您可以更好地控制要显示的数据列数),以及您自己的foreach($data["results"][0]["entities"][0]["urls"] as $value)类。

这是一个例子。

首先,您需要执行BaseAdapter(在布局文件夹中创建此文件)文件,因为您希望每行显示名称和年龄,这就是它的样子:

row_layout.xml

现在,您有一个行布局。我使用了<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:weightSum="100" > <TextView android:id="@+id/nameTextView" android:layout_gravity="center" android:layout_width="0dp" android:layout_weight="50" android:layout_height="match_parent" android:textSize="25dp" android:text="Name" /> <TextView android:id="@+id/ageTextView" android:layout_gravity="center" android:layout_width="0dp" android:layout_weight="50" android:layout_height="match_parent" android:textSize="25dp" android:text="Age" /> </LinearLayout> 属性,因此您可以放心,由于父布局的权重为100,每个textView(名称和年龄)为50,因此您的列将分成两半。您可以更改textView的weightSum只要总数是LinearLayout的layout_weight即100。

接下来,您需要创建一个BaseAdapter。此类处理listView填充行布局的方式。

创建一个新类:

weightSum

它可能看起来像一口,但我会为你分解它。重要的部分是public class CustomListViewAdapterNameAndAge extends BaseAdapter { private ArrayList<NameAndAgeClass> listData; private LayoutInflater layoutInflater; private Context context; public CustomListViewAdapterNameAndAge(Context context, ArrayList<NameAndAgeClass> listData) { this.listData = listData; layoutInflater = LayoutInflater.from(context); this.context = context; } @Override public int getCount() { return listData.size(); } @Override public Object getItem(int position) { return listData.get(position); } @Override public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; // int type = getItemViewType(position); if (convertView == null) { convertView = layoutInflater.inflate(R.layout.row_layout.xml, null); holder = new ViewHolder(); holder.name = (TextView) convertView.findViewById(R.id.nameTextView); holder.age = (TextView) convertView.findViewById(R.id.ageTextView); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.name.setText(listData.get(position).getName); holder.age.setText(listData.get(position).getAge)); return convertView; } static class ViewHolder { TextView name; TextView age; } } 函数,您可以在其中获取布局文件getView,然后获取持有者对象(请参阅下面的ViewHolder),根据布局文件设置名称和年龄TextViews,然后设置值根据您的row_layout.xml ArrayList。 NameAndAgeClass对象是您将用于填充列表的对象。在您的情况下,它将listDataname作为私有变量,然后您将拥有setter,getters和构造函数。我假设你已经知道如何制作那个,所以我不再放入代码了。

在您的主要活动中,在age功能中,执行以下操作:

onCreate()

就是这样。您的应用应该在包含2列的ListView中显示您的数据。

之后,您可以在listView中添加//instantiate your listView ListView nameAndAgeListView = (ListView) findViewById(R.id.idOfYourListViewHere); //create your listView with your custom object ArrayList<NameAndAgeClass> nameAndAgeList = new ArrayList<>(); // IMPT, POPULTE THE ARRAYLIST HERE you can do a for loop or whatever you want // //create your adapter, use the nameAndAgeList ArrayList CustomListViewAdapterNameAndAge nameAndAgeAdapter = new CustomListViewAdapterNameAndAge(this, nameAndAgeList); //get your listView and use your adapter nameAndAgeListView.setAdapter(nameAndAgeAdapter);

Working Sample Here