2012-01-11 6 views
0

ドラッグアンドドロップが動作し、TouchListViewクラスがうまく機能します。しかし、私の場合、私は複数の行を持つことができるEditTextを含む私のアダプタのために、さまざまな高さの行を持っています。したがって、私はドロップした後、すべての行がtlv:normal_heightに変換されます。私の場合は74dipです。これにより、多くの行がEditTextのすべてのテキストを切り捨てます。私はアダプタ(mylistview.setAdapter = myadapter)を初期化し、リストビューをGONE、VISIBLE、invalidateViews()に設定しようとしましたが、何もドラッグする前にListViewをリセットしていないようです。ここで何ができますか? -ThxCommonswareドラッグドロップは、行の高さを永久に縮小します

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

答えて

0

元AOSPコードが均一な行の高さのために設計されており、全体expanded_height構築物が降下が発生する場所を視覚化するユーザーのためのスペースを提供するために、そこにあったことを少し疑問があります。

一つの出発点は、おそらくレイアウトで宣言された値に固定されているとは対照的にnormal_heightexpanded_heightpositionに基づいて、アダプタから動的に取得されることになる(SpinnerAdapterに類似)TouchListAdapterミックスイン・インターフェースを作成することであろう。それだけで十分か、それ以上の仕事が必要なのかどうか、私は言いません。

解決策を考え出す場合は、パッチを歓迎します。さもなければ、私はおそらくこれをいつか見ていますが、それほど早くはありません。

近い将来の銀色の弾丸を持っていないことについて私のお詫び申し上げます。

+0

私は感謝します。 TouchListViewクラスを少し編集して、ListViewアイテムの高さに基づいて行の高さを動的に設定できるかどうかを確認します。私は、TouchListViewクラスからListViewのアダプタにアクセスできると想定しています。そうすれば、コード内の正しい場所にポイントできますか? – Mike6679

+0

@Mike: 'getAdapter()'を使ってアダプタを取得します。 – CommonsWare

0

getAdapter()というunExpandViews()メソッドを編集し、アダプタ内のすべての項目に対して高さを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); 
        } 
      } 
    } 
関連する問題