自定义列表视图不会填充

时间:2011-07-25 21:00:03

标签: android

我的布局分为4个部分,每个部分都有相同的布局。 4个相对布局,每个都有一个图像视图,textview和listview。可以将布局视为具有自定义布局的2x2网格,其中包含一个imageview,textview和listview。列表视图包含2个文本视图。我有一个ArrayAdapter<>与listview一起使用。我将listview的数据放在一个数据结构中,然后传递给适配器。当我运行应用程序时,布局的列表视图区域是空白的,其中显示了imageview和textview。我尝试调试问题,发现适配器的getView没有被调用。

布局如下所示。 application1及以下部分是listview shuld的来源。 http://i.imgur.com/9ifIg.png

主要布局文件:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
<RelativeLayout android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <RelativeLayout android:id="@+id/app1"
        android:layout_width="150dip"
        android:layout_height="250dip"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true">

        <ImageView android:id="@+id/app1Img"
            android:layout_width="175dip"
            android:layout_height="wrap_content"
            android:src="@drawable/icon"
            android:layout_centerHorizontal="true"
            android:layout_below="@id/app1Data"
            android:background="@color/blue"/>

        <TextView android:id="@+id/app1Heading"
            android:layout_width="fill_parent"
            android:layout_height="40dip"
            android:layout_below="@id/app1Img"
            android:paddingLeft="25dip"
            android:background="@color/color2"/>
        <ListView android:id="@+id/app1Data"
            android:layout_width="fill_parent"
            android:layout_height="200dip"
            android:scrollbars="vertical">
        </ListView>

    </RelativeLayout>


    <RelativeLayout android:id="@+id/app2"
        android:layout_width="150dip"
        android:layout_height="250dip"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true">

        <ImageView android:id="@+id/app2Img"
            android:layout_width="175dip"
            android:layout_height="wrap_content"
            android:src="@drawable/icon"
            android:layout_centerHorizontal="true"
            android:background="@color/blue"/>

        <TextView android:id="@+id/app2Heading"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/app2Img"
            android:paddingLeft="25dip"
            android:background="@color/color2"/>

        <ListView android:id="@+id/app2Data"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:scrollbars="vertical"
            android:layout_below="@id/app2Heading"
            android:background="@color/color3">
        </ListView>
    </RelativeLayout>


    <RelativeLayout android:id="@+id/app3"
        android:layout_width="150dip"
        android:layout_height="250dip"
        android:layout_alignParentLeft="true"
        android:layout_below="@id/app1">

        <ImageView android:id="@+id/app3Img"
            android:layout_width="175dip"
            android:layout_height="wrap_content"
            android:src="@drawable/icon"
            android:layout_centerHorizontal="true"
            android:background="@color/blue"/>

        <TextView android:id="@+id/app3Heading"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/app3Img"
            android:paddingLeft="25dip"
            android:background="@color/color2"/>

        <ListView android:id="@+id/app3Data"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:scrollbars="vertical"
            android:layout_below="@id/app3Heading"
            android:background="@color/color3">
        </ListView>
    </RelativeLayout>
    <RelativeLayout android:id="@+id/app4"
        android:layout_width="150dip"
        android:layout_height="250dip"
        android:layout_alignParentRight="true"
        android:layout_below="@id/app2">

        <ImageView android:id="@+id/app4Img"
            android:layout_width="175dip"
            android:layout_height="wrap_content"
            android:src="@drawable/icon"
            android:layout_centerHorizontal="true"
            android:background="@color/blue"/>

        <TextView android:id="@+id/app4Heading"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/app4Img"
            android:paddingLeft="25dip"
            android:background="@color/color2"/>

        <ListView android:id="@+id/app4Data"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:scrollbars="vertical"
            android:layout_below="@id/app4Heading"
            android:background="@color/color3">
        </ListView>
    </RelativeLayout>
</RelativeLayout>
</LinearLayout>

Listview布局文件:

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

   <TextView android:id="@+id/mainText"
android:layout_width="150dip"
android:layout_height="wrap_content"
/>

<TextView android:id="@+id/subscript"
android:layout_width="150dip"
android:layout_height="wrap_content"
android:lines="2"
android:singleLine="false"/>
</LinearLayout>

主要活动:

TextView app1Header;
ImageView app1Img;
ListView app1Data;


TextView app2Header;
ImageView app2Img;
ListView app2Data;


TextView app3Header;
ImageView app3Img;
ListView app3Data;


TextView app4Header;
ImageView app4Img;
ListView app4Data;

    ApplicationData applicationData = _allApplicationData.get(0);
    app1Header.setText(applicationData.mHeadlineText);
    ArrayList<DashboardListItem> application1ListItems = new ArrayList<DashboardListItem>();
    DashboardListItem application1ListItem1 = new DashboardListItem();
    DashboardListItem application1ListItem2 = new DashboardListItem();
    application1ListItem1.mainText = getApplicationMainTextForRow(0, applicationData.mApplicationName, _organization);
    application1ListItem1.subscript = getApplicationSubscriptForRow(0, applicationData.mApplicationName, _organization);
    application1ListItems.add(application1ListItem1);
    application1ListItem2.mainText = getApplicationMainTextForRow(1, applicationData.mApplicationName, _organization);
    application1ListItem2.subscript = getApplicationSubscriptForRow(1, applicationData.mApplicationName, _organization);
    application1ListItems.add(application1ListItem2);
    DashboardListAdapter application1Adapter = new DashboardListAdapter(getApplicationContext(), R.layout.dashboardlist, application1ListItems);
    app1Data.setAdapter(application1Adapter);

    applicationData = _allApplicationData.get(1);
    app2Header.setText(applicationData.mHeadlineText);
    ArrayList<DashboardListItem> application2ListItems = new ArrayList<DashboardListItem>();
    DashboardListItem application2ListItem = new DashboardListItem();
    application2ListItem.mainText = getApplicationMainTextForRow(0, applicationData.mApplicationName, _organization);
    application2ListItem.subscript = getApplicationSubscriptForRow(0, applicationData.mApplicationName, _organization);
    application2ListItems.add(application2ListItem);
    DashboardListAdapter application2Adapter = new DashboardListAdapter(getApplicationContext(), R.layout.dashboardlist, application2ListItems);
    app2Data.setAdapter(application2Adapter);

    applicationData = _allApplicationData.get(2);
    app3Header.setText(applicationData.mHeadlineText);
    ArrayList<DashboardListItem> application3ListItems = new ArrayList<DashboardListItem>();
    DashboardListItem application3ListItem = new DashboardListItem();
    application3ListItem.mainText = getApplicationMainTextForRow(0, applicationData.mApplicationName, _organization);
    application3ListItem.subscript = getApplicationSubscriptForRow(0, applicationData.mApplicationName, _organization);
    application3ListItems.add(application3ListItem);
    DashboardListAdapter application3Adapter = new DashboardListAdapter(getApplicationContext(), R.layout.dashboardlist, application3ListItems);
    app3Data.setAdapter(application3Adapter);

    applicationData = _allApplicationData.get(3);
    app4Header.setText(applicationData.mHeadlineText);
    ArrayList<DashboardListItem> application4ListItems = new ArrayList<DashboardListItem>();
    DashboardListItem application4ListItem = new DashboardListItem();
    application4ListItem.mainText = getApplicationMainTextForRow(0, applicationData.mApplicationName, _organization);
    application4ListItem.subscript = getApplicationSubscriptForRow(0, applicationData.mApplicationName, _organization);
    application4ListItems.add(application4ListItem);
    DashboardListAdapter application4Adapter = new DashboardListAdapter(getApplicationContext(), R.layout.dashboardlist, application4ListItems);
    app4Data.setAdapter(application4Adapter);

适配器文件:

public class DashboardListAdapter extends ArrayAdapter<DashboardListItem>{

private Context mContext;
private ArrayList<DashboardListItem> dashBoardData;
int resource;

public DashboardListAdapter(Context context, int textViewResourceId,
        ArrayList<DashboardListItem> objects) {
    super(context, textViewResourceId, objects);
    // TODO Auto-generated constructor stub
    mContext = context;
    resource = textViewResourceId;
    dashBoardData = objects;
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public DashboardListItem getItem(int arg0) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    View v = convertView;
    if(convertView == null){
        convertView = new LinearLayout(getContext());
        String inflater = Context.LAYOUT_INFLATER_SERVICE;
        LayoutInflater vi;
        vi = (LayoutInflater) getContext().getSystemService(inflater);
        v = vi.inflate(resource,null);
    } 
    //DashboardListItem appData = dashBoardData.get(position);
    DashboardListItem listItem = dashBoardData.get(position);
    TextView mainText = (TextView) v.findViewById(R.id.mainText);
    TextView subscript = (TextView)v.findViewById(R.id.subscript);

    mainText.setText(listItem.mainText);
    subscript.setText(listItem.subscript);
    return convertView;
}

}

编译或运行应用程序时,我没有收到任何错误。只是getView()没有被调用。传递给适配器的数据的arraylist被填充并手动传递,以确保数据被填充以确保。我从日志中检查过数据不为空/空。

我非常坚持这一点。我试图搜索很多,但我仍然无法找到为什么getView()没有被调用。

2 个答案:

答案 0 :(得分:1)

我找到了问题的解决方案。这是我的错。在适配器getview我做了2个错误。一个是使用我传递给构造函数的资源来膨胀视图,而不是使用R直接引用布局。第二个是我正在膨胀它以查看v我返回转换视图的位置。非常感谢你的时间和帮助。

答案 1 :(得分:0)

在要显示数据的位置使用.setDatasetChanged(),以告知列表视图的填充。

我认为你应该从你传递给构造函数的List中设置文本dashBoardData.get(position)

在哪里从xml实例化listview?我在你的代码中的任何地方都没看到它

您必须执行此操作才能填充列表(这适用于您的所有列表视图)

ListView app1Data = (ListView)findViewById(R.id.app1Data);  // <--- This is what might be causing your issue.