gpt4 book ai didi

android - ListFragment 显示错误的项目

转载 作者:行者123 更新时间:2023-11-30 03:58:21 25 4
gpt4 key购买 nike

我是 android api 的新手,我在 .. 基础知识方面遇到了一些问题。我试图让列表正常工作,但列表显示了错误的文本:

每一行有两个 TextView(标题,副标题),这里是 xml:

<?xml version="1.0" encoding="utf-8"?>
<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="5dip" >

<TextView
android:id="@+id/row_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TITLE"
android:textSize="15dip"
android:layout_gravity="center_vertical" />

<TextView
android:id="@+id/row_subtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/row_title"
android:text="SUBTITLE"
android:textSize="10dip"
android:layout_gravity="center_vertical" />

</RelativeLayout>

我扩展了 ListFragment(我需要这个 fragment ,因为有一个 slidingMenu 库),有一个自定义适配器和一个项目类。在 onActivityCreated() 方法中,我向适配器添加了一些随机项:

package com.slidingmenu.example;

import android.app.Fragment;
import android.app.ListFragment;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;


public class SampleListFragment extends ListFragment {

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.list, null);
}

public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);

SampleAdapter adapter = new SampleAdapter(getActivity());
for (int i = 0; i < 20; i++) {
adapter.add(new SampleItem(new Fragment(), "title no. " + i, "some subtitle"));
}
setListAdapter(adapter);
}

private class SampleItem {
public Fragment frag;
public String title;
public String subTitle;
public SampleItem(Fragment frag, String title, String subTitle) {
this.frag = frag;
this.title = title;
this.subTitle = subTitle;
}
}

public class SampleAdapter extends ArrayAdapter<SampleItem> {

public SampleAdapter(Context context) {
super(context, 0);
}

public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.row, null);
}
TextView title = (TextView) convertView.findViewById(R.id.row_title);
TextView subTitle = (TextView) convertView.findViewById(R.id.row_subtitle);

return convertView;
}

}
}

所以我认为列表会显示如下内容:

title no. 0
some subtitle
-
title no. 1
some subtitle
-
title no. 2
some subtitle
-

etc.

但它只显示我在 row.xml 中定义的内容:

TITLE
SUBTITLE
-
TITLE
SUBTITLE
-

etc.

我认为 getView() 需要更改(至少它对我来说意义不大)但我不确定。我尝试的所有操作都会导致一些空指针异常或更糟。

拜托,有人可以告诉我我需要更改什么吗?

最佳答案

错误是在适配器中:

  public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.row, null);
}
TextView title = (TextView) convertView.findViewById(R.id.row_title);
TextView subTitle = (TextView) convertView.findViewById(R.id.row_subtitle);

return convertView;
}

getView 永远不会填充titlesubtitle。其次,您永远不会将要在 ListFragment 中显示的数据集提交给 superclass

在这里你必须有方法。或者您可以验证 getCountgetItem 以及 getItemId 方法,或者使用 this 为父类(super class)提供数据集构造函数。仔细阅读文档。

关于android - ListFragment 显示错误的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12971822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com