ListView获取Item点击事件

ListVIew子控件中包含button之类的控件,需要设置该buttonandroid:focusable="false"属性,或者Listview-item的根节点设置android:descendantFocusability="blocksDescendants"属性,如果子控件设置了android:focusable="false"属性,父控件就不用设置了,否则有可能使得Item点击事件失效。

ListVIew中添加分类item,如果为分类名称,则点击不进行相关操作,adapter重写isEnabled方法即可,设置相应的返回值

@Override

public boolean isEnabled(int position) {

return getItemViewType(position) != VIEW_TYPE_CATEGORY;

}

LiteViewitem保持选中状态

一般情况下,item一旦失去焦点就会恢复原状态,保持item的选中状态,也就是说当点击某一Item时,显示其他控件(失去焦点),返回时该item仍然处于选中状态,点击其他item时才恢复原状态。

实现方式:

定义变量,记录前一次选中的item,当再次点击Item时,将上次viewBackGround清空,保存当前状态。代码如下:

ViewoldView=null;

@Override

protectedvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.example);

listview.setAdapter(actionsAdapter);

listview.setOnItemClickListener(newAdapterView.OnItemClickListener() {

@Override

publicvoidonItemClick(AdapterView<?> adapter, Viewv,intposition,longflags) {

if(oldView!=null){

oldView.setBackgroundResource(0);

}

oldView=v;

v.setBackgroundResource(R.drawable.action_list_foucs)

}

});

注:上面方法,适用于ListViewitem不超过一页的情况,如果item过多,上下滚动的时候会出现两个item被选中。

方式二:解决滚动时item被选中的状态

定义两个变量,一个保存当前点击itemposition,另一个保存点击的view,代码如下:

listview.setOnItemClickListener(newAdapterView.OnItemClickListener() {

@Override

publicvoidonItemClick(AdapterView<?> adapter, View v,intposition,longflags) {

v.setBackgroundResource(R.drawable.action_list_foucs);//把当前选中的条目加上选中效果

if(last_item!= -1 &&last_item!= position) {

//如果已经单击过条目并且上次保存的item位置和当前位置不同

oldView.setBackgroundResource(0);//把上次选中的样式去掉

}

oldView= v;//把当前的条目保存下来

last_item= position;//把当前的位置保存下来

//此处使用sharedpreference保存参数,传递到Adapter

Editor editor =sp.edit();

editor.putInt("last_item",last_item);

editor.commit();

}

});

adapter

@Override

publicView getView(intposition, View convertView, ViewGroup parent) {

finalinttype = getItemViewType(position);

finalViewHolder holder;

intlast_item =sp.getInt("last_item", -1);

if(convertView ==null) {

if(type ==VIEW_TYPE_CATEGORY){

convertView =mInflater.inflate(R.layout.category_list_item, parent,false);

}else{

convertView =mInflater.inflate(R.layout.action_list_item, parent,false);

}

holder =newViewHolder();

holder.text= (TextView) convertView.findViewById(android.R.id.text1);

convertView.setTag(holder);

}else{

holder = (ViewHolder) convertView.getTag();

}

if(last_item==position){

holder.text.setBackgroundResource(R.drawable.action_list_foucs);

}else{

holder.text.setBackgroundResource(0);

}

holder.text.setText(mTitles[position]);

returnconvertView;

}

注:上面代码中,activityadapter实时传递参数用的sharedPreference,也可以换成其他方式。

ListView中item点击事件、item保持选中状态以及其他细节_第1张图片

更多相关文章

  1. Android控件重叠显示小记
  2. 72、android状态栏一体化,状态栏改变颜色
  3. Android控件ToggleButton多状态按钮使用详解
  4. Android控件布局属性全解
  5. Android如何实现5.0以上图片沉浸式状态栏
  6. Delphi XE5 for android 使用 BITMAP STYLE DESIGNER 改变控件背
  7. Android教你一步一步实现简单重用自定义控件

随机推荐

  1. android 关于自定义Application的使用
  2. Android APK文件在电脑上面运行方法
  3. Android中数据存储----SQLite数据库
  4. Android屏幕密度(Density)和分辨率的关系
  5. Android = Java
  6. Android中解决图像解码导致的OOM问题
  7. Android(安卓)studio 下载安装
  8. Activity 组件的启动流程
  9. Android 学习笔记——利用JNI技术在Andro
  10. Android HAL