java - Listview android 值在滚动中混淆

标签 java android listview android-listview android-arrayadapter

我正在使用 ArrayAdapter 在我的 Listview 中显示项目,但是当我滚动项目的顺序改变时,我猜 pb 在 getView 方法中,我试图添加一个 viewHolder 来解决这个问题但没有改变,我的 Listview 仍然困惑

这是我的适配器:

public class AdpaterFeed extends ArrayAdapter<String> {
    String[] data;
    int layoutResourceId;
    Helper helper;

    public AdpaterFeed(Context context, int layoutResourceId, String[] data) {
        super(context, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.data = data;
        this.helper = Helper.getInstance();

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if (convertView == null) {
            LayoutInflater vi = (LayoutInflater) getContext().getSystemService(
                    Context.LAYOUT_INFLATER_SERVICE);
            convertView = vi.inflate(layoutResourceId, parent, false);
            viewHolder = new ViewHolder();
            viewHolder.txt =(TextView) convertView.findViewById(R.id.text3);
            viewHolder.webview = (WebView) convertView.findViewById(R.id.webview);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        if (getItem(position) != null) {

            if (getItem(position).contains("<img")) {

                viewHolder.webview.loadData(helper.rss[position], "text/html", "UTF-8");

            } else {

                viewHolder.txt.setText(Html.fromHtml(helper.title[position]));
                viewHolder.webview.loadData(helper.rss[position], "text/html", "UTF-8");
            }
        }

        return convertView;
    }

    public static class ViewHolder {
        TextView txt;
        WebView webview;

    }

}

有谁能帮帮我吗?

最佳答案

更新:根据 OP 在评论中的精确度,我相信问题出在加载 web View 的方式上。也许您应该找到一种方法来控制 AsyncTasks 的加载,并确保将正确的 View 与正确的内容相匹配。


也许你的问题在于你没有删除第一部分的文本,如果:

if (getItem(position).contains("<img")) {
    viewHolder.text.setVisibility(View.GONE); // maybe you want this here?
    viewHolder.webview.loadData(getItem(position), "text/html", "UTF-8");
} else {
    viewHolder.text.setVisibility(View.VISIBLE); // and compensate here
    viewHolder.text.setText(Html.fromHtml(helper.title[position]));
    viewHolder.webview.loadData(getItem(position), "text/html", "UTF-8");
}

如果您有不同种类的项目(带有文本或带有图像),也许您应该看看适配器中的 View 类型。这是一项非常重要的功能,允许针对不同类型的 View 使用不同的布局。


无关: 关于这段代码:

TextView text = (TextView) convertView.findViewById(R.id.text3);
WebView wv = (WebView) convertView.findViewById(R.id.webview);

viewHolder = new ViewHolder();
viewHolder.txt = text;
viewHolder.webview = wv;

我发现跳过局部变量更简洁(而且绝对更短):

viewHolder = new ViewHolder();
viewHolder.txt = (TextView) convertView.findViewById(R.id.text3);
viewHolder.webview = (WebView) convertView.findViewById(R.id.webview);

关于java - Listview android 值在滚动中混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28348001/

相关文章:

android - Android 自定义 ListView 中的搜索功能

java - 正则表达式字符串 "\\p{Cntrl}"在 Java 中匹配什么?

java套接字编程阻塞对服务器和客户端的读写

android - 如何将图像放入 EditText 字段?

android - 此 Android SDK 需要 Android Developer Toolkit 版本 23.0.0 或更高版本

android - Listview Baseadapter搜索功能

c# - ListView ItemCommand 事件未在 Firefox 中触发

java - 在单独的进程中打开 url

java - 在 Java 中返回内部集合的最佳实践是什么?

android - 如何使 ListItem Textview 用作 Twitter 推文并获得不同的 Linkify 点击次数?