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;
			}	
		});
	}
}
原文地址:https://www.cnblogs.com/SanguineBoy/p/9748316.html