ListView常用属性及设置点击事件

***1.ListView控件常用属性
choiceMode:设置ListView的选择行为
divider:设置列表项的分隔条的颜色
dividerHeight;设置分隔条高度
entries:指定一个数组资源,android将根据该资源生成listview,如android:entries="@array/xxx",资源可以到values文件夹中的string.xml中添加
footerDividersEnabled:如果设置为false将不会在footerView之前设置分隔条
headerDividersEnabled:如果设置为false将不会在headerView之后设置分隔条

***2.常见问题及解决方法
问题1:listview在拖动的时候背景图片消失变成黑色背景。等到拖动完毕我们自己的背景图片才显示出来。
解决办法:
xml中: android:scrollingCache="false" 或者 android:cacheColorHint="#00000000"
代码中: setScrollingCacheEnabled(false) 或者 setCacheColorHint(0) 或者setCacheColorHint(Color.TRANSPARENT);
问题2:listview的上边和下边有黑色的阴影。
解决办法:
xml中: android:fadingEdge="none"
代码中:setFadingEdgeLength(0);
问题3:lsitview的每一项之间需要设置一个图片做为间隔。
解决办法:
xml中 :android:divider="@drawable/list_driver
java中:Drawable dr = this.getResources().getDrawable(R.colo.listviewdividerClour);
ListView.setDivider(dr);
问题4:默认会显示选中的item为橙黄底色,有时候我们需要去掉这种效果:
解决办法:
xml中:listSelector="@android:color/transparent
衍生:ListView选中时默认是黄色,很多时候会和我们软件的配色不符合,那么需要修改默认的ListView配色,
java中:
Drawable drawable=getResources().getDrawable(R.drawable.touch_feedback);
ListView.setSelector(drawable);
xml中:
listSelector="@android:color/blue
同理运用到 GridView中

***3.设置ListView控件的点击事件:

public class MainActivity extends Activity {
    private ArrayAdapter<String> adapter;
    private ListView lv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        lv = (ListView) findViewById(R.id.listview);
        //1.准备数据源(可以直接在这里定义数组,也可在strings.xml中定义数据源,然后在这里获取)
        final String[] citys = getResources().getStringArray(R.array.citys);
        //2.将数据源的数据加载到适配器中
        adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1,citys);
        //3.将适配器中的数据加载到控件中
        lv.setAdapter(adapter);
        
        //为ListView控件的每个Item设置监听事件
        lv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                /*获取Item中数据的四种方式*/
                String s1 = citys[position];//从数据源中获取
                String s2 = adapter.getItem(position);//从适配器中获取
                String s3 = parent.getItemAtPosition(position).toString();//从parent中获取
                String s4 = lv.getItemAtPosition(position).toString();//从ListView控件中获取
                Toast.makeText(MainActivity.this, "s1="+s1+",s2="+s2+",s3="+s3+",s4="+s4, Toast.LENGTH_SHORT).show();   
            }
            
        });
        //这是为ListView控件中的Item设置长按事件
        lv.setOnItemLongClickListener(new OnItemLongClickListener() {
            //这是长按时的回调函数
            //若ListView既绑定监听事件也绑定了长按事件,此时返回值为false时表示对事件不处理(对点击和长按事件都会触发),若为true表示对事件处理(只对长按事件触发)
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view,
                    int position, long id) {
                return false;
            }   
        });
    }
}

猜你喜欢

转载自www.cnblogs.com/SanguineBoy/p/9748316.html
今日推荐