A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 我是楠楠 于 2017-8-17 11:02 编辑

找工作,怎么才能拿到高薪offer,对于没有工作过、没有面试过的学员们,当天面试回来一定要总结。面试题一定要记下来,有笔试题就更好了,直接手机拍下来,晚上回来总结;不懂的可以问老师去群里面交流或者是查资料,把整理好的面试题共享,让其他小伙伴看到,每个人都这样做,日积月累我们就会有一个庞大的面试题库,受益你我他。一句话:面试——>总结——>分享。







一.ListView的事件:
1.setOnItemClickListener()点击事件,设置“点击”listview某一项的监听事件。
其中view参数指点击的Listview的那一项的布局,可通过view.findViewById找到布局中感兴趣的控件,然后再获取控件的值
position指点击的adapter的那一项的位置(索引从0开始)
id指点击的Listview的那一项的Id(索引从0开始)
     listview.setOnItemClickListener(newOnItemClickListener() {
           @Override
          public void onItemClick(AdapterView<?> parent,Viewview,
                   int position, long id){
                Toast.makeText(ArrayAdapterActivity.this,"你点击了第"+(position+1)+"项", Toast.LENGTH_SHORT).show();
          }
       });
2.setOnItemLongClickListener()长按事件,设置“长按”listview某一项的监听事件。
    listview.setOnItemLongClickListener(newOnItemLongClickListener() {  
          @Override  
          public boolean onItemLongClick(AdapterView<?> parent,Viewview,  
                   int position, long id){
          Toast.makeText(ArrayAdapterActivity.this, "你长按了第"+(position+1)+"项",Toast.LENGTH_SHORT).show();
          return false;
       }
    });
二.ListView由于item项中包含某些可以抢焦点的控件导致无法获取焦点问题:
(注意:ListView的项根元素layout的宽要设置成android:layout_width="fill_parent",否则可能会因为项内容太短,导致点击时获取不到焦点)
  1>.如果你自定义ListView的项中包含能获得焦点的子控件(RadioGroup、Button、CheckBox、DatePicker、ImageButton、ScrollView、SeekBar、EditText、ToggleButton、RatingBar等)的话,默认焦点会被交给这些子控件,而ListView的项能被选中的基础是它能获取焦点,所以项中的这些子控件的焦点必须为false,这样ListView的项才能获取onItemLongClick事件与onItemClick事件
解决办法(以Button为例):
在布局文件中,在项的layout布局文件根元素中加入android:descendantFocusability="blocksDescendants"如:
<?xmlversion="1.0"encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:descendantFocusability="blocksDescendants" >

<ImageView
android:id="@+id/header"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@id/header"
android:layout_toRightOf="@id/header" />

<TextView
android:id="@+id/age"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/name"
android:layout_below="@id/name" />

<Button
android:id="@+id/delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="@string/deleteselect" />
</RelativeLayout>
如果layout是程序动态生成的,则调用
layout.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
  2>.如果你自定义ListView的项中包含能获得焦点的子控件GridView的话,默认焦点会被交给这些子控件,而ListView的项能被选中的基础是它能获取焦点,所以项中的这些子控件的焦点必须为false,这样ListView的项才能获取onItemLongClick事件与onItemClick事件
解决办法(以Button为例): 
      1.在布局文件中,在项的layout布局文件根元素中加入
android:descendantFocusability="blocksDescendants"
      2.程序中给GridView进行如下设置
gridView.setClickable(false);
gridView.setPressed(false);
gridView.setEnabled(false);
三.ListView的UI显示中常见问题及解决办法
1>如果需求是listview点击时,item无背景变色效果
步骤:
  1.drawable文件夹中新建timer_list_selector.xml内容如下
<?xmlversion="1.0"encoding="utf-8"?>
<selectorxmlns:android="http://schemas.android.com/apk/res/android" >
   <itemandroid:state_selected="true"android:drawable="@color/transparent"/>
</selector>
  2.values文件夹中新建colors.xml内容如下
<?xmlversion="1.0"encoding="utf-8"?>
<resources>
   <colorname="transparent">#50000000</color>
</resources>
  3.布局文件中给listview加入如下属性
android:listSelector="@drawable/timer_list_selector"
2>listview设置分割线Divider样式,布局文件给listview加入如下属性(已分隔符为颜色为例)
  android:divider属性用来设置分割线颜色(或图片),当设置为#00000000时表示item之间无间隙;
  通过android:dividerHeight属性设置分割线高度
    android:divider="#ff999999"
     android:dividerHeight="1sp"
3>UI展现时常见问题
  问题1:listview设置背景,拖动listview时显示黑色,只有拖动完才会显示我们设置的背景颜色或图片
  产生原因:listview的背景是固定不变的,默认Listview的每项的背景是透明的,拖动滚动条的过程中需要实时将每个项的显示内容跟背景进行混合运算,android系统为了优化这个过程,使用了android:cacheColorHint属性,在黑色背景下默认颜色为#191919,所以出现了上面的黑色显示问题
  解决办法:(根据需求而定)
    1.如果只换背景颜色:将android:cacheColorHint设置成和背景颜色一样或android:scrollingCache="false"如下   
      android:cacheColorHint="#ff00ff00"
      android:background="#ff00ff00"
      android:scrollingCache="false"
        android:background="#ff00ff00"
    2.如果用图片做背景:将android:cacheColorHint设为#00000000变为透明或android:scrollingCache="false"即可如下
      android:cacheColorHint="#00000000"
        android:background="@drawable/ic_launcher"
      android:scrollingCache="false"
        android:background="@drawable/ic_launcher"
  问题2:listview上面或下面有黑色阴影
  解决办法:布局文件中给listview加入android:fadingEdge="none"
  UI总结:
  综上问题得到最终的布局为(带分割线+背景色)
 
<ListView
      android:id="@+id/listview"
      android:layout_width="fill_parent"
      android:layout_height="180dip"
      android:divider="#ff999999"
      android:dividerHeight="1sp"
       android:fadingEdge="none"
      android:scrollingCache="false"
      android:background="#ff00ff00"

       />

1 个回复

倒序浏览
多谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马