gpt4 book ai didi

java - 带分隔符的自定义 ListView 变得疯狂

转载 作者:行者123 更新时间:2023-12-02 07:51:34 25 4
gpt4 key购买 nike

我正在尝试实现一个自定义 ListView,其中包含分隔符。这是代码:

单标题:

public class SingleTitle {
String mTitle;
int[] mInterval;

public SingleTitle(String title, int[] interval) {
mTitle = title;
mInterval = interval;
}

public String getTitle() {
return mTitle;
}

public int[] getInterval() {
return mInterval;
}
}

标题类别:

public class TitleCategory {
String mTitle;

public TitleCategory(String title) {
mTitle = title;
}

public String getTitle() {
return mTitle;
}
}

list_category_divider.xml:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

<include
android:id="@+id/list_item_section_text"
layout="@android:layout/preference_category" />

</ LinearLayout >

返回列表的方法:

    public static List<Object> getStructuredTitles(Context context) {
List<Object> list = new ArrayList<Object>();
String[] mTitles = getCategoriesTitles(context);
String[] mParts = getPartsTitles(context);

list.add(new TitleCategory(mParts[0]));
list.add(new SingleTitle(mTitles[0], CATEGORIES_INTERVALS[0]));
list.add(new TitleCategory(mParts[1]));
list.add(new SingleTitle(mTitles[1], CATEGORIES_INTERVALS[1]));
list.add(new SingleTitle(mTitles[2], CATEGORIES_INTERVALS[2]));
list.add(new SingleTitle(mTitles[3], CATEGORIES_INTERVALS[3]));
list.add(new SingleTitle(mTitles[4], CATEGORIES_INTERVALS[4]));
list.add(new TitleCategory(mParts[2]));
list.add(new SingleTitle(mTitles[5], CATEGORIES_INTERVALS[5]));
list.add(new SingleTitle(mTitles[6], CATEGORIES_INTERVALS[6]));
list.add(new SingleTitle(mTitles[7], CATEGORIES_INTERVALS[7]));
list.add(new SingleTitle(mTitles[8], CATEGORIES_INTERVALS[8]));
list.add(new SingleTitle(mTitles[9], CATEGORIES_INTERVALS[9]));
list.add(new SingleTitle(mTitles[10], CATEGORIES_INTERVALS[10]));
list.add(new TitleCategory(mParts[3]));
list.add(new SingleTitle(mTitles[11], CATEGORIES_INTERVALS[11]));

return list;
}

我的自定义适配器:

  public class TitlesAdapter extends BaseAdapter {
private Context context;
private List<Object> entries;

public TitlesAdapter(Context context, List<Object> entries) {
this.context = context;
this.entries = entries;
}


@Override
public int getCount() {
return entries.size();
}

@Override
public Object getItem(int position) {
return entries.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
Object entry = entries.get(position);
boolean isCategory = (entry instanceof TitleCategory);

if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(isCategory ? R.layout.list_category_divider : R.layout.list_items_simple, null);
}

if (isCategory) {
TitleCategory tc = (TitleCategory)entry;
convertView.setClickable(false);

Log.d("DBG", "Entry: " + position + " | " + tc.getTitle());
TextView tv = (TextView) convertView.findViewById(android.R.id.simple_list_item_2);
if (tv != null) tv.setText(tc.getTitle());
} else {
SingleTitle tc = (SingleTitle)entry;

Log.d("DBG", "Entry: " + position + " | " + tc.getTitle());
TextView tv = (TextView) convertView.findViewById(android.R.id.text1);
if (tv != null)
tv.setText(tc.getTitle());
}
return convertView;

}


public List<Object> getList() {
return entries;
}

public void setList(List<Object> newentries) {
entries = newentries;
notifyDataSetChanged();
}

}

我的问题:该应用程序最初很好地绘制了列表,但是当我上下滚动列表时,它会弄乱条目。然而,logcat 中生成的输出是正确的,但 Android 弄乱了列表。有什么想法吗?

更新: Correct one Wrong one

最佳答案

尝试实现getViewTypeCount() 。在你的情况下它应该返回 2。

@Override
public int getViewTypeCount() {
return 2;
}

如果未实现该方法,Android 可能会对单个 View 类型做出一些假设。

还重写 getItemViewType(intposition) 以使其根据列表中的索引是否为 ' 返回 01类别”或“标题”。

@Override 
public int getItemViewType(int position) {
...
}

关于java - 带分隔符的自定义 ListView 变得疯狂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10164962/

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