Android:关于ListView和SimpleAdapter
我尝试使用SimpleAdapter填充列表视图,但失败了 我读过很多案例,但仍然找不到有用的方法 这是代码。我不知道有什么问题Android:关于ListView和SimpleAdapter,android,listview,simpleadapter,Android,Listview,Simpleadapter,我尝试使用SimpleAdapter填充列表视图,但失败了 我读过很多案例,但仍然找不到有用的方法 这是代码。我不知道有什么问题 ArrayList<HashMap<String,Object>> listdata=new ArrayList<HashMap<String,Object>>(); for (int i=0;i<3;i++){ HashMap<String, Object> hm = new
ArrayList<HashMap<String,Object>> listdata=new ArrayList<HashMap<String,Object>>();
for (int i=0;i<3;i++){
HashMap<String, Object> hm = new HashMap<String, Object>();
hm.put("title", "title");
hm.put("context", "context");
listdata.add(hm);
}
String[] from = {"title", "context"};
int[] to={R.id.title,R.id.context};
SimpleAdapter adapter = new SimpleAdapter(this, listdata, R.layout.list_item, from, to);
ListView lv=(ListView)this.findViewById(R.id.listView1);
lv.setAdapter(adapter);
ArrayList listdata=new ArrayList();
对于(int i=0;i我总是将列表项放在一个单独的xml文件中。可以尝试将两个文本视图的线性布局放在一个文件中(可以称之为listrow.xml)
例如:
以下是listitem(list\u stat\u item.xml):
下面是主视图(view_stats.xml):
代码如下:
创建ArrayList,并向其中添加项,然后绑定到自定义适配器
ArrayList<StatItem> lst = new ArrayList<StatItem>();
lst.add(new StatItem("Current Week: ", String.valueOf(currentWeek)));
lst.add(new StatItem("Weeks Left: ", String.valueOf(GeneralUtils.daysUntilBirth(this, pregnancyID) / 7)));
lst.add(new StatItem("Days Left: ", String.valueOf(GeneralUtils.daysUntilBirth(this, pregnancyID))));
lst.add(new StatItem("Current Trimester: ", String.valueOf(currentTrimester)));
lst.add(new StatItem("Posts: ", String.valueOf(blogCount)));
lst.add(new StatItem("Baby Names: ", String.valueOf(babyNamesCount)));
getListView().setSelector(android.R.color.transparent);
StatListAdapter sa = new StatListAdapter(this, R.layout.list_stat_item, lst );
setListAdapter(sa);
ArrayList lst=new ArrayList();
lst.add(新统计项(“当前周:”,String.valueOf(当前周));
lst.add(新统计项(“剩余周数:”,String.valueOf(GeneralUtils.daysuntilbornight(this,pregnacyid)/7));
lst.add(新统计项(“剩余天数:”,String.valueOf(GeneralUtils.daysuntilbornight(this,pregnacyid)));
lst.add(新统计项(“当前三个月:”,String.valueOf(当前三个月));
lst.add(新的StatItem(“Posts:,String.valueOf(blogCount)));
lst.add(新统计项(“婴儿姓名:”,String.valueOf(BabyNameScont));
getListView().setSelector(android.R.color.transparent);
StatListAdapter sa=新StatListAdapter(此,R.layout.list_stat_item,lst);
setListAdapter(sa);
如果要查看适配器代码(StatListAdapter扩展了ArrayAdapter):
公共类StatListAdapter扩展了ArrayAdapter
{
公共阵列列表项;
公共StatListAdapter(上下文上下文、int textViewResourceId、ArrayList对象){
超级(上下文、textViewResourceId、对象);
此项=对象;
}
公共视图getView(int位置、视图转换视图、视图组父视图)
{
视图v=转换视图;
如果(v==null)
{
LayoutInflater li=(LayoutInflater)getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
v=li.充气(R.布局.列表\统计\项,空);
}
StatItem i=项目。获取(位置);
如果(i!=null)
{
TextView kt=(TextView)v.findViewById(R.id.txtKey);
TextView vt=(TextView)v.findViewById(R.id.txtValue);
kt.setText(i.key);
vt.setText(i.value);
}
返回v;
}
}
我怀疑问题出在Xml上,请尝试为列表项声明第二个布局文件
您的_activity.xml:
<?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"
>
<ListView android:layout_height="wrap_content" android:id="@+id/listView1" android:layout_width="fill_parent" />
</LinearLayout>
和list_item.xml:
<?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:layout_height="wrap_content" android:id="@+id/title" android:text="TextView" android:layout_width="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge"></TextView>
<TextView android:text="TextView" android:id="@+id/context" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
</LinearLayout>
如果您使用上述两个布局文件,您的代码看起来不错,应该可以正常工作。您能用这两个布局文件更新您的问题吗?您发布的Xml看起来不好剪切粘贴谢谢您的评论。在我更改列表项后,这确实有效谢谢您的努力。您做得非常好。这是解决此问题的另一种方法.我发现了我的错误。它是由list_item.xml引起的
ArrayList<StatItem> lst = new ArrayList<StatItem>();
lst.add(new StatItem("Current Week: ", String.valueOf(currentWeek)));
lst.add(new StatItem("Weeks Left: ", String.valueOf(GeneralUtils.daysUntilBirth(this, pregnancyID) / 7)));
lst.add(new StatItem("Days Left: ", String.valueOf(GeneralUtils.daysUntilBirth(this, pregnancyID))));
lst.add(new StatItem("Current Trimester: ", String.valueOf(currentTrimester)));
lst.add(new StatItem("Posts: ", String.valueOf(blogCount)));
lst.add(new StatItem("Baby Names: ", String.valueOf(babyNamesCount)));
getListView().setSelector(android.R.color.transparent);
StatListAdapter sa = new StatListAdapter(this, R.layout.list_stat_item, lst );
setListAdapter(sa);
public class StatListAdapter extends ArrayAdapter<StatItem>
{
public ArrayList<StatItem> items;
public StatListAdapter(Context context, int textViewResourceId, ArrayList<StatItem> objects) {
super(context, textViewResourceId, objects);
this.items = objects;
}
public View getView(int position, View convertView, ViewGroup parent)
{
View v = convertView;
if (v == null)
{
LayoutInflater li = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = li.inflate(R.layout.list_stat_item, null);
}
StatItem i = items.get(position);
if (i != null)
{
TextView kt = (TextView)v.findViewById(R.id.txtKey);
TextView vt = (TextView)v.findViewById(R.id.txtValue);
kt.setText(i.key);
vt.setText(i.value);
}
return v;
}
}
<?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"
>
<ListView android:layout_height="wrap_content" android:id="@+id/listView1" android:layout_width="fill_parent" />
</LinearLayout>
<?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:layout_height="wrap_content" android:id="@+id/title" android:text="TextView" android:layout_width="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge"></TextView>
<TextView android:text="TextView" android:id="@+id/context" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
</LinearLayout>