我正在尝试设置一个包含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>
答案 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对象是您将用于填充列表的对象。在您的情况下,它将listData
和name
作为私有变量,然后您将拥有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);
。