1

私のアプリケーションにはListViewがあり、ユーザーが要求した後、各listviewの行の先頭にあるimageviewのドラッグを介して再配置できます。小さなウィンドウでユーザーにリストビューを表示し、スペースを最大化するために、ドラッグビューの表示をGONEに設定し、ユーザーが[リストの編集]を必要とするメニュー項目を選択したときにのみ表示に設定することを計画しています。アイテム。

行アイテムのレイアウトは次のとおりです。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?android:attr/activatedBackgroundIndicator"
android:orientation="horizontal" >

<ImageView
    android:id="@id/drag_handle"
    android:layout_width="32dp"
    android:layout_height="32dp"
    android:layout_margin="8dp"
    android:visibility="gone"
    android:src="@drawable/ic_drag_dots_holo_dark" />

<View
    android:layout_width="1dp"
    android:layout_height="match_parent"
    android:layout_marginBottom="16dp"
    android:layout_marginTop="16dp"
    android:background="?android:attr/dividerVertical" />

    <TextView
        android:id="@+id/drag_n_drop_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="8dp"
        android:paddingRight="8dp"
        android:maxLines="1"
        android:minHeight="24dp"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="?android:attr/textColorPrimary" />
</LinearLayout>

メニュー選択のコードは次のとおりです。

    @Override
public boolean onContextItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.menu_edit_playlist:
        if (inEditMode) {
            //If we are already showing the drag view, hide it. 
            inEditMode = false;                             
            findViewById(R.id.drag_handle).setVisibility(View.GONE);
        }
        else {
            //If the drag view is hidden, make it visible. 
            inEditMode = true;
            findViewById(R.id.drag_handle).setVisibility(View.VISIBLE);
        }                       
        return true;
    default:
        return super.onContextItemSelected(item);
    }
}

このコードの問題は、これを呼び出すsetVisibility()と、リストビューの最初の項目のドラッグビューの表示のみが変更され、他のすべての行のドラッグビューが非表示のままになることです。

この場合、すべての行のすべてのドラッグビューを表示するにはどうすればよいですか?

編集これは、編集を押した後の外観の 画像です。これは、上記のコードを使用した、現在の外観の画像です。

ありがとう!

4

1 に答える 1

3

このコードの問題は、setVisibility()を呼び出すと、リストビューの最初の項目のドラッグビューの表示のみが変更され、他のすべての行のドラッグビューが非表示のままになることです。

レイアウトからそのIDを持つaの最初の出現を返すメソッドをView使用して、行からの可視性を変更しようとしているので、この動作は正常です。その最初の出現は、リストの最初に表示される行に配置されます(とにかく、このメソッドは機能しません。おそらく、の行のビューはすべて同じIDを持っていることがわかります)。findViewById()ViewfindViewByIdListView

この場合、すべての行のすべてのドラッグビューを表示するにはどうすればよいですか?

適切な方法は、アダプターにListView現在の状態(inEditModegetView )を知らせ、それに基づいてメソッドのドラッグハンドルを表示/非表示にすることです。これを実行したら、で行う必要があるのは、状態変数onContextItemSelectedを更新し、アダプターのメソッドを呼び出すことだけです。inEditModenotifyDataSetChanged()

于 2013-02-14T12:40:51.597 に答える