gpt4 book ai didi

Android ArrayAdapter 无法正确转换 View

转载 作者:行者123 更新时间:2023-11-30 01:02:35 24 4
gpt4 key购买 nike

我有一个用于 ListView 的自定义 ArrayAdapter,它使用自定义行布局,在 XML 中单独定义。布局只是三个 TextViews 和一个 ImageView,放在一个 RelativeLayout 中。为了提高性能,适配器使用了一个 ViewHolder 系统,就像描述的那样 here转换现有 View 而不是扩充新 View 。在 ArrayAdapter.getView() 中,适配器应该根据 bool 值加粗或取消加粗第一个 TextView。

当我第一次打开应用程序时,所有 TextView 都正确加粗或未加粗。但是,如果我滚动到 ListView 的底部,然后滚动回顶部,所有标题 TextView 都是粗体,即使它们不应该是粗体。我认为它一定与转换已经是粗体的现有 View 有关,但我无法弄清楚它是什么。我已经使用 Android Studio 调试了该应用程序,它的运行就像我认为的那样——当我向上滚动时,适配器在调试窗口中正确地加粗/取消加粗,但它们在应用程序上似乎都是加粗的。

我注意到的一件事是,如果我将 TextView 的 textStyle 属性更改为“粗体”,所有 TextView 的标题从一开始就是粗体,并且永远不会改变。只有当我删除 textStyle 或将其设置为“正常”时,TextViews 在开始时才正常。

这是 ArrayAdapter 中的 getView():

@Override
public View getView(int position, View convertView, ViewGroup parent) {
PostShell shell = postShellList.get(getCount() - 1 - position); //I stack my ListView backwards, so index 0 is at the bottom
ViewHolder holder;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.row_layout, parent, false);
holder = new ViewHolder();
holder.firstLine = (TextView) convertView.findViewById(R.id.firstLine);
holder.secondLine = (TextView) convertView.findViewById(R.id.secondLine);
holder.thirdLine = (TextView) convertView.findViewById(R.id.thirdLine);
holder.image = (ImageView) convertView.findViewById(R.id.image);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.firstLine.setText(shell.postTitle);
if (shell.unread) {
holder.firstLine.setTypeface(holder.firstLine.getTypeface(), Typeface.BOLD);
} else {
holder.firstLine.setTypeface(holder.firstLine.getTypeface(), Typeface.NORMAL);
}
//convert other TextViews
}

我的 ViewHolder 类只是一个带有几个 TextView 和一个 ImageView 的静态类。

下面是我正在使用的行布局的相关代码部分:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="88dp">

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="84dp"
android:paddingRight="16dp"
android:paddingTop="6dp"
android:id="@+id/firstLine"
android:ellipsize="end"
android:text="First"
android:textStyle="normal"
android:singleLine="true" />

<!-- other views -->

</RelativeLayout>

最佳答案

问题似乎是“unboldening”文本不适用于以下语句:

holder.firstLine.setTypeface(holder.firstLine.getTypeface(), Typeface.NORMAL);

以下代码 fragment 省略了 holder.firstLine.getTypeface(),只使用了更简单的 setTypeface()。为我工作。

if (shell.unread) {
holder.firstLine.setTypeface(holder.firstLine.getTypeface(), Typeface.BOLD);
} else {
holder.firstLine.setTypeface(Typeface.DEFAULT);
}

关于Android ArrayAdapter 无法正确转换 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39238033/

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