我的布局分为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()没有被调用。
答案 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.