0

给定 aListActivityListView根据用户输入更改项目的要求,进行更改以使更改在滚动后继续存在的方法是什么?

当前,应用程序使用来自数据库的 aResourceCursorAdapter填充。Cursor当用户长按一个项目时,该项目上的和ImageView之间切换。此外,管理支持视图状态的数据库中的标志。View.VISIBLEView.GONE

但是,当该项目从屏幕上滚出,然后又回到屏幕上时,该项目会显示为没有最近的更改。换句话说,如果我通过ImageView长按使可见,它显示得很好。但是当我滚动离开该项目,然后滚动回它时,它不再可见。

我目前的解决方案(我认为是错误的)是保存滚动位置,从数据库刷新整个列表,然后再次定位到正确的位置。

我想有一些方法可以告诉一些 Androidy 东西将新的可见性状态放入它的缓存中,但我找不到它。我试过setScrollingCacheEnabled(false)了,其他一些缓存是假的,但这些似乎都没有什么不同。我试图弄清楚如何让 Android 意识到它是“脏的”,但我发现的只是查询它是否isDirty()。我也试过ResourceCursorAdapter.notifyDataSetChanged()了,这使得setVisibility()通话对可见性无效。我也在各个地方尝试过invalidate()invalidateViews()如果以正确的顺序(在可见性改变之前或之后)应用于正确的对象,它可能是其中之一。

4

1 回答 1

0

覆盖 ListView 中的 getView 方法并尝试像这样使用它:

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder; // view lookup cache stored in tag
        if (convertView == null) {
            viewHolder = new ViewHolder();
            LayoutInflater inflater = LayoutInflater.from(getContext());
            convertView = inflater.inflate(R.layout.your.layout, parent, false);
            viewHolder.img = (TextView) convertView.findViewById(R.id.img);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        if (condition) {
            viewHolder.img.setVisibility(VIEW.VISIBLE);
        else { 
           viewHolder.img.setVisibility(VIEW.GONE);
        }

        // Return the completed view to render on screen
        return convertView;
    }
于 2016-08-23T22:07:28.193 回答