GridView,(GridView)ListView.setSelector(),ListView中Header/Footer的删除和添加/显示与隐藏

2023-11-23 08:32

本文主要是介绍GridView,(GridView)ListView.setSelector(),ListView中Header/Footer的删除和添加/显示与隐藏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

> GridView

GridView.selector: GridView的设置根据Item选择状态改变背景状态

-- GridView横向滚动 Android:
a.包裹HorizontalScrollView控件是GirdView横向滚动的基本条件
b.GirdView外包裹LinearLayout是java代码中参数设置的必要条件

-- mGridView.setOnScrollListener(mNearByScroll);
AbsListView.OnScrollListener mNearByScroll = new AbsListView.OnScrollListener() {
        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            // 一直在滚动中,多次触发 , 顺序: 3
        }

        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
            switch (scrollState) {
                case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
                    // 手指触屏拉动准备滚动,只触发一次 , 顺序: 1
                    break;
                case AbsListView.OnScrollListener.SCROLL_STATE_FLING:
                    // 持续滚动开始,只触发一次 , 顺序: 2
                    break;
                case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:
                    // 整个滚动事件结束,只触发一次 , 顺序: 4
                    break;
                default:
                    break;
            }
        }
    };

> ListView.setSelector()
 1.方法一:在listview中配置android:listSelector="@drawable/xxx"
或者在listview的item中添加属性android:background="@drawable/xxx"
 2.方法二:Drawable drawable = getResources().getDrawable(R.drawable.xxx);  
ListView.setSelector(drawable);但是这样会出现列表下拉有时候为黑的情况,
需要加上:android:cacheColorHint="@android:color/transparent"使其透明。

-- ListView设置点击背景效果,有三种方法可以来引用刚才创建的selector文件:
(1)在ListView中添加如下属性代码
android:listSelector="@drawable/mylist_view"

(2)在ListView的item界面中添加如下属性代码
android:background="@drawable/mylist_view"

(3)利用JAVA代码直接编写
Drawable drawable = getResources().getDrawable(R.drawable.mylist_view);
listView.setSelector(drawable);

Android中的Selector主要是用来改变ListView和Button控件的默认背景
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
     <item android:state_pressed="true"
           android:drawable="@drawable/ic_mymenu_pressed" /> <!-- pressed -->
     <item android:state_focused="true"
           android:drawable="@drawable/ic_mymenu_pressed" /> <!-- focused -->
     <item android:drawable="@drawable/ic_mymenu" /> <!-- default -->  
</selector>

<?xml version="1.0" encoding="utf-8" ?>     
<selector xmlns:android="http://schemas.android.com/apk/res/android">   
    <!-- 默认时的背景图片-->    
  <item android:drawable="@drawable/pic1" />      
    <!-- 没有焦点时的背景图片 -->    
  <item android:state_window_focused="false"     
        android:drawable="@drawable/pic1" />     
    <!-- 非触摸模式下获得焦点并单击时的背景图片 -->    
  <item android:state_focused="true" android:state_pressed="true"   android:drawable= "@drawable/pic2" />   
    <!-- 触摸模式下单击时的背景图片-->    
  <item android:state_focused="false" android:state_pressed="true"   android:drawable="@drawable/pic3" />    
    <!--选中时的图片背景-->    
  <item android:state_selected="true"   android:drawable="@drawable/pic4" />     
    <!--获得焦点时的图片背景-->    
  <item android:state_focused="true"   android:drawable="@drawable/pic5" />     
</selector>

-- ListView的getItemViewType();getItemViewType和getViewType方法;
Android之ListView的getItemViewType和getViewTypeCount- https://www.cnblogs.com/RGogoing/p/5872217.html

-- ListView getItemViewType与getViewTypeCount
java.lang.ArrayIndexOutOfBoundsException: length=2; index=2- https://blog.csdn.net/ai_yong_jie/article/details/51502935

-- ListView中Header/Footer的删除和添加/显示与隐藏
 ListView中Header、Footer View; listView.addHearderView(item_head);  listView.setAdapter(adapter);
 listview删除item刷新 ; listview ItemView设置GONE,仍占空间。layout.removeView(textView); ListView删除最后一个ItemView。
ListView中Header, Footer无法隐藏(gone)的问题- https://www.cnblogs.com/xgjblog/p/4554845.html
Android ListView的header footer设置visibility gone不起作用- https://www.cnblogs.com/zc9527/p/4591433.html
在Android开发中,在使用listView时,我们会经常用到footerView或者headerView,给ListView添加的footer和header好多时候,会根据情况隐藏和显示。
  因为footer和header使用删除和添加的方法总感觉不好。而直接设置footer和header中的view为GONE时,虽然内容不显示了,但是这块区域还是会被占用。
  经过各种方法测试,最后得出一个可以完美解决该问题的方法,如下代码:
 this.footerLayout.setVisibility(View.GONE);
 this.footerLayout.setPadding(0, -footerLayout.getHeight(), 0, 0); 意思就是把内容往上移动View的高度。
  当然,在需要显示的时候,还要设置回来(做一个if  else处理即可)
 this.footerLayout.setVisibility(View.VISIBLE);
 this.footerLayout.setPadding(0, 0, 0, 0);

解决ListView header和footer隐藏仍占用界面空间的问题- https://blog.csdn.net/hyhasd001/article/details/45532287
直接设置footer和header中的view为GONE时,虽然内容不显示了,但是这块区域还是会被占用。
在使用ListView的header和footer的过程中,如果需要动态的显示和隐藏header和footer的话,以前以为直接setVisibility中的View.GONE就可以。但是在实际使用中发现并不是这样的。直接设置GONE后,虽然元素是隐藏了,但是还是占用着那个区域。感觉就像View.INVISIBILE一样的效果了。后来在网上查找后发现。只要给footer再加上一个layout或者是父级的view就可以了。

mRootView.setVisibility(View.GONE);
// footerView显示与隐藏会影响焦点态,导致焦点丢失
mRootView.setPadding(0, -mRootView.getHeight(), 0, 0);
mRootView.setTop(-1);

mRootView.setVisibility(View.VISIBLE);
// footerView显示与隐藏会影响焦点态,导致焦点丢失
mRootView.setPadding(0, 0, 0, 0);

- 动态删除View Android
llContentView.addView(layout, iIndex)往某一位置添加子控件,通过llContentView.removeViewAt(iIndex)删除某一位置上的子控件。
if(mStack.size()>0){
             mParentlayout.removeView(mStack.pop());

}

- ListView.setEmptyView(TipView)与notifyDataSetChanged()。
ListView之setEmptyView的问题

ListView.scrollListBy(-height);可能会发现在低版本上失效或者直接报错显示需要API19以上.
解决ListView的scrollListBy()方法不生效问题- https://www.jianshu.com/p/87ca7879b3c0

 

这篇关于GridView,(GridView)ListView.setSelector(),ListView中Header/Footer的删除和添加/显示与隐藏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/416663

相关文章

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,

Redis过期键删除策略解读

《Redis过期键删除策略解读》Redis通过惰性删除策略和定期删除策略来管理过期键,惰性删除策略在键被访问时检查是否过期并删除,节省CPU开销但可能导致过期键滞留,定期删除策略定期扫描并删除过期键,... 目录1.Redis使用两种不同的策略来删除过期键,分别是惰性删除策略和定期删除策略1.1惰性删除策略

SpringBoot项目删除Bean或者不加载Bean的问题解决

《SpringBoot项目删除Bean或者不加载Bean的问题解决》文章介绍了在SpringBoot项目中如何使用@ComponentScan注解和自定义过滤器实现不加载某些Bean的方法,本文通过实... 使用@ComponentScan注解中的@ComponentScan.Filter标记不加载。@C

MySQL中删除重复数据SQL的三种写法

《MySQL中删除重复数据SQL的三种写法》:本文主要介绍MySQL中删除重复数据SQL的三种写法,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录方法一:使用 left join + 子查询删除重复数据(推荐)方法二:创建临时表(需分多步执行,逻辑清晰,但会

Apache Tomcat服务器版本号隐藏的几种方法

《ApacheTomcat服务器版本号隐藏的几种方法》本文主要介绍了ApacheTomcat服务器版本号隐藏的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1. 隐藏HTTP响应头中的Server信息编辑 server.XML 文件2. 修China编程改错误

电脑显示hdmi无信号怎么办? 电脑显示器无信号的终极解决指南

《电脑显示hdmi无信号怎么办?电脑显示器无信号的终极解决指南》HDMI无信号的问题却让人头疼不已,遇到这种情况该怎么办?针对这种情况,我们可以采取一系列步骤来逐一排查并解决问题,以下是详细的方法... 无论你是试图为笔记本电脑设置多个显示器还是使用外部显示器,都可能会弹出“无HDMI信号”错误。此消息可能

Python按条件批量删除TXT文件行工具

《Python按条件批量删除TXT文件行工具》这篇文章主要为大家详细介绍了Python如何实现按条件批量删除TXT文件中行的工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.简介2.运行效果3.相关源码1.简介一个由python编写android的可根据TXT文件按条件批

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问