根据单击的项目操作ListView中的其他列表项目

蒂勒曼

我有一个包含带有自定义适配器的ListView的片段。我的目标是操纵列表项的子视图(以显示阴影)。如果单击某个项目,则必须通过更改创建阴影的视图的可见性来操纵列表项目之前和之后的视图。

我可以成功获取参考并更改可见性,但是问题是我无法获得对当前项目上方和下方的视图的引用(因为阴影已添加到所需的阴影中以创建阴影效果)。

我在片段的mSettingsListView上使用onItemClick侦听器。

分段:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    Log.d("Debugging", "onCreateView");
    View view = inflater.inflate(R.layout.settings_fragment_list, container, false);
    final ViewGroup viewGroup = container;

    Log.d(getTag(), "Finding settingsListView");
    mSettingsListView = (ListView) view.findViewById(R.id.settingsListView);
    mSettingsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.d("Debugging", "settingsListView onItemClick position: " + position);

            // Remove right shadow on current item when clicked
            View rightShadow = view.findViewById(R.id.settingsListRowShadowRight);
            rightShadow.setVisibility(View.GONE);

            // Shadow to be shown when active list item is the last
            // Shadow is shown on item above and view below list
            Log.d("Debugging", "settingsListView onItemClick position else clause");

            // Add a shadow at the bottom of the list item ABOVE current
            View aboveView = parent.getAdapter().getView(position -1, view, viewGroup);
            View aboveViewShadow = aboveView.findViewById(R.id.settingsListRowShadowAbove);
            aboveViewShadow.setVisibility(View.VISIBLE);

            // Add a shadow at the top of the list item BELOW current
            View belowView = parent.getAdapter().getView(position +1, view, viewGroup);
            View belowViewShadow = belowView.findViewById(R.id.settingsListRowShadowBelow);
            belowViewShadow.setVisibility(View.VISIBLE);
        }
    });

    return view;
}

现在,阴影不会添加到上方和下方的列表项中,而是会添加到所单击的项目上。另一个怪癖是,当单击列表项时,它将使用下面的列表项的文本进行更新。

列表项的布局:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/settingsListRowContainer"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:background="@drawable/settings_list_view_listitem_selector">

    <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="horizontal"
            android:paddingTop="@dimen/giraf_settings_list_row_paddingTop"
            android:paddingBottom="@dimen/giraf_settings_list_row_paddingBottom"
            android:paddingLeft="@dimen/giraf_settings_list_row_paddingLeft"
            android:paddingRight="@dimen/giraf_settings_list_row_paddingRight">

        <ImageView
                android:id="@+id/settingsListAppLogo"
                android:layout_width="@dimen/giraf_settings_list_row_imageView_size"
                android:layout_height="@dimen/giraf_settings_list_row_imageView_size"
                android:layout_marginRight="@dimen/giraf_settings_list_row_imageView_marginRight">
        </ImageView>

        <TextView
                android:id="@+id/settingsListAppName"
                android:layout_toRightOf="@id/settingsListAppLogo"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:gravity="center_vertical"
                android:textColor="@android:color/black"
                android:text="@string/giraf_settings_name"
                android:textSize="32dp" >
        </TextView>

    </LinearLayout>

    <!-- Shadow showing ABOVE active list item -->
    <FrameLayout
            android:id="@+id/settingsListRowShadowAbove"
            android:layout_width="fill_parent"
            android:layout_height="@dimen/giraf_settings_list_shadowSize"
            android:layout_gravity="bottom"
            android:background="@drawable/settings_list_view_shadow_top"
            android:visibility="gone"/>

    <!-- Shadow showing BELOW active list item -->
    <FrameLayout
            android:id="@+id/settingsListRowShadowBelow"
            android:layout_width="fill_parent"
            android:layout_height="@dimen/giraf_settings_list_shadowSize"
            android:layout_gravity="top"
            android:background="@drawable/settings_list_view_shadow_bottom"
            android:visibility="gone"/>

    <!-- Right shadow showing on a list item when inactive -->
    <FrameLayout
            android:id="@+id/settingsListRowShadowRight"
            android:layout_width="@dimen/giraf_settings_list_shadowSize"
            android:layout_height="fill_parent"
            android:layout_gravity="right"
            android:background="@drawable/settings_list_view_shadow_right"/>

</FrameLayout>

我不是如何使适配器在某个位置返回视图,以及在引用它时是否应该/如何使它膨胀?

编辑:刚刚添加了自定义适配器的getView()方法。

定制适配器的getView方法:

public View getView(int position, View convertView, ViewGroup parent) {
    View vi = convertView;

    if(convertView == null)
        vi = mInflater.inflate(R.layout.settings_fragment_list_row, null);

    // Get current item in the list
    SettingsListItem item = mApplicationList.get(position);

    ImageView appIcon = (ImageView)vi.findViewById(R.id.settingsListAppLogo);
    TextView appNameText = (TextView)vi.findViewById(R.id.settingsListAppName);

    // Setting all values in ListView
    appIcon.setBackgroundDrawable(item.appIcon);
    appNameText.setText(item.appName);

    return vi;
}
蒂勒曼

我找到了解决方案。问题是我试图使用适配器来获取对单击的列表项上方和下方的视图的引用。相反,我可以通过在父视图(列表视图本身)上使用getChildAt()方法找到合适的视图。

就像写一样容易:

View aboveView = parent.getChildAt(position -1)
View aboveViewShadow = aboveView.findViewById(R.id.settingsListRowShadowAbove);
aboveViewShadow.setVisibility(View.VISIBLE);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何根据其他项目更改选定列表项目?

来自分类Dev

在jsp中操作列表项目符号

来自分类Dev

Android-为什么当我在自定义ListView中单击其中一个动画时,该动画也可以在许多其他列表项目上使用?

来自分类Dev

对列表中的每个项目以及列表中的每个其他项目执行操作

来自分类Dev

从其他活动的列表中删除项目

来自分类Dev

单击其他页面中的项目时获得listview值。xaml

来自分类Dev

如何通过单击操作栏中溢出图标下的项目来调用其他活动

来自分类Dev

如何通过单击操作栏中溢出图标下的项目来调用其他活动

来自分类Dev

当我单击ListView中的另一个项目时,如何访问其他项目的textview?

来自分类Dev

单击列表视图的项目时如何去其他活动?

来自分类Dev

ListView选定的项目添加其他ListView

来自分类Dev

根据项目路径在功能区中显示其他选项

来自分类Dev

Android Listview,单击获取列表中的项目名称

来自分类Dev

Android ListView获取最后选择的项目,并从onItemClick中的其他ListView获取最后选择的项目

来自分类Dev

隐藏选定的项目并显示其他项目,而不是从jQuery项目列表中显示

来自分类Dev

通过比较其他列表中的项目从列表中删除项目

来自分类Dev

将我与Python列表中的其他项目进行比较

来自分类Dev

更新ObservableCollection,从其他列表中接收项目

来自分类Dev

如何从Sass列表中删除所有其他项目?

来自分类Dev

如何从其他表单的列表中添加/删除项目?

来自分类Dev

从 <ul> 中删除列表项目符号

来自分类Dev

根据条件从数组中删除特定项目,并在javascript中返回其他项目

来自分类Dev

精灵列表项目

来自分类Dev

在列表中查找项目,并使用linq从同一位置的其他列表中获得其他项目

来自分类Dev

单击android中的gridview的特定项目时如何刷新其他项目

来自分类Dev

为什么在遍历列表时从列表中删除项目会跳过其他所有项目

来自分类Dev

单击项目时,使其他项目可见

来自分类Dev

单击listview的项目时,如何使其视图颜色为红色,其他为黑色?

来自分类Dev

单击列表项时如何显示其他数据?

Related 相关文章

  1. 1

    如何根据其他项目更改选定列表项目?

  2. 2

    在jsp中操作列表项目符号

  3. 3

    Android-为什么当我在自定义ListView中单击其中一个动画时,该动画也可以在许多其他列表项目上使用?

  4. 4

    对列表中的每个项目以及列表中的每个其他项目执行操作

  5. 5

    从其他活动的列表中删除项目

  6. 6

    单击其他页面中的项目时获得listview值。xaml

  7. 7

    如何通过单击操作栏中溢出图标下的项目来调用其他活动

  8. 8

    如何通过单击操作栏中溢出图标下的项目来调用其他活动

  9. 9

    当我单击ListView中的另一个项目时,如何访问其他项目的textview?

  10. 10

    单击列表视图的项目时如何去其他活动?

  11. 11

    ListView选定的项目添加其他ListView

  12. 12

    根据项目路径在功能区中显示其他选项

  13. 13

    Android Listview,单击获取列表中的项目名称

  14. 14

    Android ListView获取最后选择的项目,并从onItemClick中的其他ListView获取最后选择的项目

  15. 15

    隐藏选定的项目并显示其他项目,而不是从jQuery项目列表中显示

  16. 16

    通过比较其他列表中的项目从列表中删除项目

  17. 17

    将我与Python列表中的其他项目进行比较

  18. 18

    更新ObservableCollection,从其他列表中接收项目

  19. 19

    如何从Sass列表中删除所有其他项目?

  20. 20

    如何从其他表单的列表中添加/删除项目?

  21. 21

    从 <ul> 中删除列表项目符号

  22. 22

    根据条件从数组中删除特定项目,并在javascript中返回其他项目

  23. 23

    精灵列表项目

  24. 24

    在列表中查找项目,并使用linq从同一位置的其他列表中获得其他项目

  25. 25

    单击android中的gridview的特定项目时如何刷新其他项目

  26. 26

    为什么在遍历列表时从列表中删除项目会跳过其他所有项目

  27. 27

    单击项目时,使其他项目可见

  28. 28

    单击listview的项目时,如何使其视图颜色为红色,其他为黑色?

  29. 29

    单击列表项时如何显示其他数据?

热门标签

归档