android如何创建多行列表视图
我正在尝试创建一个列表项,该列表项由位于另一个列表项上方的两个列表项组成。我使用的代码如下:android如何创建多行列表视图,android,android-listview,android-adapter,Android,Android Listview,Android Adapter,我正在尝试创建一个列表项,该列表项由位于另一个列表项上方的两个列表项组成。我使用的代码如下: package com.example.list2; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.widget.ListView; public class MainActivity extends Activity { @Override
package com.example.list2;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ListView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView lv1=(ListView)findViewById(R.id.listView1);
Level data[] = new Level[]
{
new Level("Heading 1", "Subheading 1"),
new Level("Heading 2", "Subheading 2"),
new Level("Heading 3", "Subheading 3")
};
LevelAdapter adp=new LevelAdapter(this, R.layout.list_item, data);
lv1.setAdapter(adp);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
level.java文件如下所示:
package com.example.list2;
public class Level {
//public int icon;
public String title;
public String title2;
public Level()
{
super();
}
public Level(String title,String title2) {
super();
//this.icon = icon;
this.title = title;
this.title2=title2;
}
}
leveladapter是这样的
package com.example.list2;
import android.app.Activity;
import android.content.Context;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class LevelAdapter extends ArrayAdapter<Level> {
static Context context;
static int layoutResourceId;
Level data[] = null;
public LevelAdapter(Context context, int layoutResourceId, Level[] data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
WeatherHolder holder = null;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
//row.setMinimumHeight(200);
holder = new WeatherHolder();
// holder.imgIcon = (ImageView)row.findViewById(R.id.imgIcon);
holder.txtTitle = (TextView)row.findViewById(R.id.txtTitle);
holder.txtTitle2 = (TextView)row.findViewById(R.id.txtTitle2);
row.setTag(holder);
}
else
{
holder = (WeatherHolder)row.getTag();
}
Level weather = data[position];
holder.txtTitle.setText(weather.title);
// holder.imgIcon.setImageResource(weather.icon);
return row;
}
static class WeatherHolder
{
// ImageView imgIcon;
TextView txtTitle;
TextView txtTitle2;
// ImageView imgIcon2;
}
}
package com.example.list2;
导入android.app.Activity;
导入android.content.Context;
导入android.graphics.Typeface;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.ImageView;
导入android.widget.TextView;
公共类级别适配器扩展了ArrayAdapter{
静态语境;
静态int布局资源ID;
级别数据[]=null;
公共级别适配器(上下文上下文,int-layoutResourceId,级别[]数据){
超级(上下文、布局资源ID、数据);
this.layoutResourceId=layoutResourceId;
this.context=上下文;
这个数据=数据;
}
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行=转换视图;
WeatherHolder=null;
if(行==null)
{
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
行=充气机。充气(layoutResourceId,父级,false);
//行设置最小高度(200);
支架=新的密封支架();
//holder.imgIcon=(ImageView)row.findViewById(R.id.imgIcon);
holder.txtTitle=(TextView)row.findViewById(R.id.txtTitle);
holder.txtitle2=(TextView)row.findViewById(R.id.txtitle2);
row.setTag(支架);
}
其他的
{
holder=(WeatherHolder)row.getTag();
}
水平天气=数据[位置];
holder.txtTitle.setText(weather.title);
//holder.imgIcon.setImageResource(weather.icon);
返回行;
}
静态类风挡
{
//ImageView imgIcon;
TextView-txtTitle;
TextView txtTitle2;
//ImageView imgIcon2;
}
}
列表项布局如下所示
<?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="fill_parent"
android:padding="10dp">
<TextView android:id="@+id/txtTitle"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:textStyle="bold"
android:textSize="22sp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:padding="50dip"
android:textColor="#736F6E"
android:layout_alignParentLeft="true"
android:textAppearance="@android:attr/textAppearanceLarge"
/>
<TextView
android:id="@+id/txtTitle2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:layout_below="@id/txtTitle"
android:textStyle="bold"
android:textSize="12sp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:padding="50dip"
android:textColor="#736F6E"
android:layout_alignParentLeft="true"
android:textAppearance="@android:attr/textAppearanceLarge"
/>
</RelativeLayout>
最后,主要活动的布局如下所示
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ListView
android:id="@+id/listView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:dividerHeight="1dp"
/>
</RelativeLayout>
在输出中,我得到的是一个高度非常大的列表项,但只有
显示的是标题,而不是副标题。我哪里做错了?
谢谢我将列表项的XML维度缩小到:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="10dp" >
<TextView
android:id="@+id/txtTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_marginBottom="2dp"
android:layout_marginTop="2dp"
android:gravity="center_vertical"
android:padding="2dip"
android:textAppearance="@android:attr/textAppearanceLarge"
android:textColor="#736F6E"
android:textSize="22sp"
android:textStyle="bold" />
<TextView
android:id="@+id/txtTitle2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@id/txtTitle"
android:layout_marginBottom="2dp"
android:layout_marginTop="2dp"
android:gravity="center_vertical"
android:padding="2dip"
android:textAppearance="@android:attr/textAppearanceLarge"
android:textColor="#736F6E"
android:textSize="12sp"
android:textStyle="bold" />
</RelativeLayout>
在LevelAdapter#getView
中,就在返回行之前,我添加了:holder.txtitle2.setText(weather.title2)代码>
结果如下图像文件所示:
这就是你想要达到的目标吗?我没有提到其他改进,比如从LevelAdapter
中删除static
字段。为什么在项目布局中有fill\u parent
?我这样做是因为列表视图占据了整个屏幕。我指的是列表项目布局。是的,这正是我试图实现的。您还可以告诉我您还做了哪些其他更改吗?只有我提到的那两个。我用wrap\u content
替换了fill\u parent
,并删除了您在TextView
中的巨大边距和填充。此外,在Adapter中添加了显示副标题的代码。我现在还面临一个问题,如果我试图使列表可单击,我只能单击列表中包含两个文本的部分(左侧),而不能单击整个右侧的空文本。为什么会这样?将列表项layout\u width
更改为match\u parent
。