Android 当键盘被隐藏时,ListView会在错误的位置回收项目

Android 当键盘被隐藏时,ListView会在错误的位置回收项目,android,listview,adapter,Android,Listview,Adapter,我有一只奇怪的虫子,我无法理解。以下是视频形式的行为 现在我来解释一下。我有一个活动,叫做NewsFeed。它由一个提要项列表视图组成(每个提要项都有一张来自url的照片,我使用缓存类加载该url,旁边还有一些文本)。如果我正常打开此活动,当我按预期滚动时,一切都正常。但是,如果我首先按下搜索键(此时键盘弹出),然后从搜索结果中选择某个内容,NewsFeed活动将打开 起初,当它显示时,键盘仍处于打开状态,然后一瞬间键盘向下移动,最终结果是顶部的两个图像是相同的(它们不应该是相同的) 通过一些调

我有一只奇怪的虫子,我无法理解。以下是视频形式的行为

现在我来解释一下。我有一个活动,叫做NewsFeed。它由一个提要项列表视图组成(每个提要项都有一张来自url的照片,我使用缓存类加载该url,旁边还有一些文本)。如果我正常打开此活动,当我按预期滚动时,一切都正常。但是,如果我首先按下搜索键(此时键盘弹出),然后从搜索结果中选择某个内容,NewsFeed活动将打开 起初,当它显示时,键盘仍处于打开状态,然后一瞬间键盘向下移动,最终结果是顶部的两个图像是相同的(它们不应该是相同的)

通过一些调试,我发现出于某种原因,前两行的viewHolder在第二次循环中(一旦键盘最终消失)最终是同一个对象


我也有类似的问题。我通过将
android:windowSoftInputMode
设置为
adjustPan

解决了这个问题。你能为用户点击搜索键时实际发生的情况添加一些见解吗。那是你们的课吗?单击结果时会发生什么情况?是否调用相同的意图?当按下搜索键(硬键)时,将打开。当这种情况发生时,用户将看到搜索栏以及一些建议。当用户在建议更新中键入内容时。单击建议时,将激发NewsFeed类的意图,搜索活动也将完成。您应该确保注销生命周期事件、onstop、onstart、onpause和onresume。我认为这是一个调用活动(您的结果活动)的问题,因为它已经打开,并且正在混合您的新旧数据。我想我永远不会发现。我重新安排了一下布局,问题就解决了。哦,好吧。
public View getView (int position, View convertView, ViewGroup parent) {

        final HashMap<String, Object> game = getItem(position);
        CollapsedNewsHolder collapsedNewsHolder;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.news_collapsed_module, null);
            collapsedNewsHolder = new CollapsedNewsHolder();
            collapsedNewsHolder.newsPicture = (ImageView) convertView.findViewById(R.id.NewsPicture);
            collapsedNewsHolder.progress = (ProgressBar) convertView.findViewById(R.id.Progress);
            collapsedNewsHolder.title = (TextView) convertView.findViewById(R.id.title);
            collapsedNewsHolder.newsPerson = (TextView) convertView.findViewById(R.id.newsPerson);
            collapsedNewsHolder.upCount = (TextView) convertView.findViewById(R.id.upCount);
            collapsedNewsHolder.commentCount = (TextView) convertView.findViewById(R.id.commentCount);
            collapsedNewsHolder.relativeTime = (TextView) convertView.findViewById(R.id.RelativeTime);
            collapsedNewsHolder.setTypeface();

            //collapsedNewsHolder.imageCallback = new MyImageCallback(mActivity, collapsedNewsHolder.newsPicture, collapsedNewsHolder.progress, MyImageCallback.SMALL, 200);
            //collapsedNewsHolder.itemClickListener = new ItemClickListener();

            convertView.setTag(collapsedNewsHolder);
        } else
            collapsedNewsHolder = (CollapsedNewsHolder) convertView.getTag();

        if ((Integer) getItem(position).get("type") != NewsFeed.POSTER)
            collapsedNewsHolder.title.setTextSize(13f);

        collapsedNewsHolder.newsPicture.setImageBitmap(null);
        collapsedNewsHolder.progress.setVisibility(View.VISIBLE);
        ImageUtil.imageCache.loadAsync((String) game.get("img"), new MyImageCallback(mActivity, collapsedNewsHolder.newsPicture, collapsedNewsHolder.progress, MyImageCallback.SMALL, 200), mContext);

        collapsedNewsHolder.title.setText((String) game.get("title"));
        collapsedNewsHolder.newsPerson.setText((String)game.get("newsPerson"));

        collapsedNewsHolder.relativeTime.setText((String) game.get("relativeTime"));
        collapsedNewsHolder.upCount.setText((Integer) game.get("upCount") + "");
        collapsedNewsHolder.commentCount.setText((Integer) game.get("commentCount") + "");
        //convertView.setOnClickListener(collapsedNewsHolder.itemClickListener.set((String) game.get("id"), position));
        convertView.setOnClickListener(new ItemClickListener((String) game.get("id"), position));
        return convertView;
    }
05-05 17:34:54.774: ERROR/NewsFeedAdapter(7101): Position- 0 Image- android.widget.ImageView@460977f8 Loading image- http://lh3.ggpht.com/o0vA6-MRGAXhhYYkPa1xf3WsPlDe4XnK2xWZeMhmXKBQI8eHGTAos0l1zqC_nox2MrRHKcCKNnPgzqLctsqh25e3LMc=s500

05-05 17:34:54.804: ERROR/NewsFeedAdapter(7101): Position- 1 Image- android.widget.ImageView@46142f28 Loading image- http://lh6.ggpht.com/RcTe-3O-Rywdp0zizVx6k6lSEuPpYbDYnu1UoEnWbhLk6BzwzXt29BvK5rMPAqkrhgtvxvddSTL3pBnMDeLIXVV3s0EZng=s500

05-05 17:34:55.154: ERROR/NewsFeedAdapter(7101): Position- 0 Image- android.widget.ImageView@46142f28 Loading image- http://lh3.ggpht.com/o0vA6-MRGAXhhYYkPa1xf3WsPlDe4XnK2xWZeMhmXKBQI8eHGTAos0l1zqC_nox2MrRHKcCKNnPgzqLctsqh25e3LMc=s500

05-05 17:34:55.174: ERROR/NewsFeedAdapter(7101): Position- 1 Image- android.widget.ImageView@460977f8 Loading image- http://lh6.ggpht.com/RcTe-3O-Rywdp0zizVx6k6lSEuPpYbDYnu1UoEnWbhLk6BzwzXt29BvK5rMPAqkrhgtvxvddSTL3pBnMDeLIXVV3s0EZng=s500

05-05 17:34:55.304: ERROR/NewsFeedAdapter(7101): Position- 2 Image- android.widget.ImageView@4615cd28 Loading image- http://lh4.ggpht.com/V95vJI4WHUUluC8_jHaJw011U6RO7I9rVBQsdSvwDrnUrOCN2YvqhHftr7o0YMNv8cIEBEjsnLNvIH0Y1KoB-rzw6hrKiQ=s500

05-05 17:34:55.334: ERROR/NewsFeedAdapter(7101): Position- 3 Image- android.widget.ImageView@46061610 Loading image- http://lh3.ggpht.com/-c7Ss0t2luOD-npAFZcjRYbnuasqjUNTOv75pFhyprhyzGDf8QdIz_PrJS5qcmBb0a5xrXzZWZYH7oc06eo=s500

05-05 17:34:55.384: ERROR/NewsFeedAdapter(7101): Position- 4 Image- android.widget.ImageView@4613d058 Loading image- http://lh3.ggpht.com/iCKp7kwcnbnZGD4vBb-Mz_mtSKPvST-YGeekJ9khljpG-Ua5Kl71ETdn8LLulULmq9fgNy8huooi_CfrT4W3gjqoFhiB=s500