【问题标题】:Android: Changing Visibility of an item inside all listview rowsAndroid:更改所有列表视图行中项目的可见性
【发布时间】:2013-01-29 12:35:28
【问题描述】:

我的应用程序中有一个 ListView,在用户请求后,它可以通过在每个列表视图行的开头拖动图像视图来重新排列。我在一个小窗口中向用户展示列表视图,为了最大化空间,我将拖动视图的可见性设置为 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() 时,它只会更改列表视图第一项上的拖动视图的可见性,而所有其他行上的拖动视图仍然隐藏。

在这种情况下,我该怎么做才能使所有行上的所有 dragViews 可见?

编辑 这是一个image,我希望它在按下编辑后看起来如何,这是一个image,它现在看起来如何,上面的代码。

谢谢!

【问题讨论】:

  • 一张图胜过千言万语。
  • @hakiko 我不确定我是否理解你的意思。

标签: android android-listview visibility android-imageview


【解决方案1】:

这段代码的问题在于,当我调用 setVisibility() 时 仅更改拖动视图在第一项上的可见性 列表视图,所有其他行上的拖动视图保持隐藏。

这种行为是正常的,因为您尝试使用findViewById() 从一行更改View 的可见性,该方法将返回View第一次 出现布局中的 id。第一次出现将位于列表的第一个可见行中(无论如何findViewById 方法将不起作用,因为您可能会看到ListView 行中的视图都将具有相同的ID)。

我该怎么做才能使所有行上的所有 dragViews 在此可见 案例?

正确的方法是让ListView的适配器知道它当前处于哪个状态(inEditMode),并据此在getView方法中显示/隐藏拖动手柄。完成此操作后,您在onContextItemSelected 中要做的就是更新inEditMode 状态变量并在适配器上调用notifyDataSetChanged() 方法。

【讨论】:

  • 你能提供一个例子吗?我也面临同样的问题
  • @Nikita 我不知道给你什么例子(关于什么部分)。您只需要维护一个布尔值来指示当前状态并更新适配器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-04
  • 2012-11-26
  • 2016-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多