正确使用twoLineListItem Android

时间:2010-12-14 03:40:06

标签: android listview

我是Android新手,并试图创建一个带有粗体标题的列表 以及每个项目的较小描述。 就像这里显示的那样(抱歉还不能发布图像):
http://i.stack.imgur.com/UVqzq.png
这是我必须开始的XML:

<LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TwoLineListItem android:layout_width="fill_parent"
android:layout_height="wrap_content" android:mode="twoLine">
<TextView android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@android:id/text1" android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<TextView android:layout_below="@android:id/text1"
android:textAppearance="?android:attr/textAppearanceSmall"
android:layout_alignLeft="@android:id/text1" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:id="@android:id/text2" />
</TwoLineListItem>
</LinearLayout> 

有没有办法从另一个xml文件中的数组填充列表?如果不是,我将如何从Java代码填充这样的列表?就像我说的我是开发新手一样,所以我可能会离开。感谢您的任何意见!

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

对于Array of Objects,您只需实现自己的适配器。 它可以用于TwoLineListItem或任何其他自定义布局。

例如,如果我有以下类型的项目列表:

public class ProfileItem {
    public String host, name, tag;

    public ProfileItem(String host, String name, String tag) {
        this.host = host;
        this.name = name;
        this.tag = tag;
    }

    @Override
    public String toString() {
        return name+"#"+tag;
    }
}

然后我创建以下适配器:

public class ProfileItemAdapter extends ArrayAdapter<ProfileItem> {

private Context context;
private int layoutResourceId;   
private List<ProfileItem> objects = null;

public ProfileItemAdapter(Context context, int layoutResourceId, List<ProfileItem> objects) {
    super(context, layoutResourceId, objects);
    this.context = context;
    this.layoutResourceId = layoutResourceId;
    this.objects = objects;
}

public View getView(int position, View convertView, ViewGroup parent)  {
    View v = convertView;
    if(v == null)
    {
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();
        v = inflater.inflate(layoutResourceId, parent, false);
    }

    ProfileItem item = objects.get(position);
    TextView titletext = (TextView)v.findViewById(android.R.id.text1);
    titletext.setText(item.toString());
    TextView mainsmalltext = (TextView)v.findViewById(android.R.id.text2);
    mainsmalltext.setText(item.host);
    return v;
}

}

然后一切就绪,在我的活动(或片段)中,我只需要在onCreate方法中设置此适配器:

setListAdapter(new ProfileItemAdapter(getActivity(),
            android.R.layout.two_line_list_item, // or my own custom layout 
            ProfileListContent.ITEMS));

答案 2 :(得分:0)

我有类似的实现,但我有3行,而不是2行listview。

这是XML:

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:orientation="vertical"  >
    <TextView
        android:id="@+id/text1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textColor="#111111"
        android:textSize="17sp"
        android:textStyle="bold"
        android:text="PROJECT NAME"
        android:typeface="monospace"
        android:paddingBottom="2dp"
        android:paddingTop="2dp"
        android:paddingLeft="5dp"
        android:paddingRight="5dp"
        android:gravity="left|center"   >
    </TextView>
    <TextView
        android:id="@+id/text2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textColor="#111111"
        android:text="Selected Type"
        android:textSize="16sp"
        android:paddingBottom="1dp"
        android:paddingTop="1dp"
        android:paddingLeft="5dp"
        android:paddingRight="5dp"  >
    </TextView>
    <TextView
        android:id="@+id/text3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textColor="#111111"
        android:textSize="16sp"
        android:paddingTop="1dp"
        android:paddingBottom="1dp"
        android:paddingLeft="5dp"
        android:paddingRight="5dp"
        android:text="Project Description"  >
    </TextView>
</LinearLayout>

这是用于从数据库返回的数据填充行的JAVA代码。此代码位于onCreate()方法中:

String[] fields = new String[]  {   db.TABLE_PRJ_NAME, db.TABLE_PRJ_TYPE, db.TABLE_PRJ_DESC };
    int[] views = new int[] {   R.id.text1, R.id.text2, R.id.text3  };

    c = db.getAllProjects();
    startManagingCursor(c);

    // Set the ListView
    SimpleCursorAdapter prjName = new SimpleCursorAdapter(
            this,
            R.layout.project_list_rows,
            //android.R.layout.simple_list_item_1,
            c, fields, views);
    setListAdapter(prjName);