0

我确实得到了拖放工作,并且 TouchListView 类工作得很好。但是,在我的情况下,由于我的适配器包含可以有多行的 EditText,因此我有不同高度的行。因此,在我放下之后,我的所有行都转换为 tlv:normal_height,在我的例子中是 74dip。这会导致许多行切断我在 EditTexts 中的所有文本。我尝试重新初始化我的适配器(mylistview.setAdapter= myadapter),将 ListView 设置为 GONE 然后 VISIBLE 和 invalidateViews() 但似乎没有任何东西将 ListView 重置回我拖动之前,除了离开活动并返回。在这里可以做什么?-谢谢

tlv:normal_height="74dip"
tlv:expanded_height="128dip"
4

2 回答 2

0

毫无疑问,最初的 AOSP 代码是为统一行高而设计的,整个expanded_height结构的存在是为了为用户提供空间来可视化下降发生的位置。

一个起点可能是创建一个TouchListAdaptermixin 接口(类似于SpinnerAdapter),其中normal_heightexpanded_height将从适配器动态检索,position而不是在布局中声明的固定值。仅此一项就足够了,还是需要做更多的工作,我不能说。

如果您提出解决方案,欢迎使用补丁。否则,我可能会在某个时候看看这个,但不会很快。

我很抱歉没有近期的灵丹妙药。

于 2012-01-11T11:36:22.967 回答
0

我编辑了 unExpandViews() 方法 - 称为 getAdapter() 并为我的适配器中的每个项目将高度设置为 0,然后将所有行设置回原始。我还绕过了该方法的删除部分,因为它不适用于我。

private void unExpandViews(boolean deletion) {

            int height_saved = 0;

            CheckBoxifiedTextListAdapter cbla = (CheckBoxifiedTextListAdapter)getAdapter();

            for (int i = 0;i < cbla.getCount(); i++) 
            {
                    //View v = getChildAt(i);

                    View v = cbla.getView(i, null, null);

                    //if (v == null) 
                    //{      
                           /*
                            if (deletion) 
                            {
                                    // HACK force update of mItemCount
                                    int position = getFirstVisiblePosition();
                                    int y = getChildAt(0).getTop();
                                    setAdapter(getAdapter());
                                    setSelectionFromTop(position, y);
                                    // end hack
                            }
                            layoutChildren(); // force children to be recreated where needed
                            v = getChildAt(i);

                            if (v == null) 
                            {
                                    break;
                            }
                            height_saved = v.getHeight();
                            */
                    //}
                    //else

                    //height_saved = v.getHeight();

                    if (isDraggableRow(v)) 
                    {
                        ViewGroup.LayoutParams params = v.getLayoutParams();
                        params.height = 0;
                        v.setLayoutParams(params);
                        v.setVisibility(View.VISIBLE);
                    }
            }
    }
于 2012-01-12T03:47:30.443 回答