Commonsware Drag Drop永久缩小行高

时间:2012-01-11 04:59:09

标签: android commonsware-cwac

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

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

2 个答案:

答案 0 :(得分:0)

毫无疑问,最初的AOSP代码是针对统一行高设计的,整个expanded_height构造用于为用户提供可视化丢弃位置的空间。

一个起点可能是创建一个TouchListAdapter mixin接口(类似于SpinnerAdapter),其中normal_heightexpanded_height将根据适配器动态检索position而不是布局中声明的固定值。无论是单独的还是更多的工作都需要做,我不能说。

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

我抱歉没有附近的银弹。

答案 1 :(得分: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);
                    }
            }
    }