Android ListView 中的按键点击事件的设置
来源:互联网 发布:我的世界工业js包 编辑:程序博客网 时间:2024/05/16 08:01
本Demo采用的方法是使用接口回调的方式来实现的。
布局文件如下:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.list_button.MainActivity"> <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/listview" /></RelativeLayout>
选项布局如下:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:descendantFocusability="blocksDescendants" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/text"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button" android:text="@string/button_name" android:focusable="false"/></LinearLayout>在选项布局中,有两个需要注意的地方:
1.android:descendantFocusability="blocksDescendants"这里简单解析一下android:descendantFocusability 这个属性 在Android的api中的解析:为定义了ViewGroup及其后代之间的关系时,寻找一个视图获取焦点。这个属性有三种值,分别为:beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
在这里,选择blocksDescendants,这样Item就不会因为item中的子控件(Button)获得焦点,而使得点击 Item时没有响应了。
2.
Button中的属性 focusable 设置为false自定义的适配器代码如下:android:focusable="false"使得Button失去焦点,原因参考第一点。
package com.example.list_button;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.TextView;import java.util.List;import java.util.zip.Inflater;/** * Created by Adminzz on 2016/5/27. */public class MyBaseAdapter extends BaseAdapter implements View.OnClickListener { private List<String> listtext; private LayoutInflater inflater; private Mycallfunction mycallfunction;//自定义接口 此接口的实现在activity中public interface Mycallfunction { public void click(View v); //此函数会被按键的点击事件调用。 } public MyBaseAdapter(Context context,List<String> listtext,Mycallfunction mycallfunction) { this.inflater= LayoutInflater.from(context);/*使用LayoutInflater 获取 Item布局文件 */ this.listtext=listtext;//设置TextView的text参数 this.mycallfunction=mycallfunction; } @Override public int getCount() { return listtext.size(); } @Override public Object getItem(int i) { return listtext.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { if(view==null) { view=inflater.inflate(R.layout.item,null); TextView text= (TextView) view.findViewById(R.id.text); Button button=(Button)view.findViewById(R.id.button); text.setText(listtext.get(i)); button.setOnClickListener(this); button.setTag(i);// setTag 作用为:为View 添加信息,需要的时候可以调用对应的getTag来获取。 } return view; } @Override public void onClick(View view) { mycallfunction.click(view);//调用本接口函数 }}Activity 的代码如下:
package com.example.list_button;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.ListView;import android.widget.Toast;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity implements MyBaseAdapter.Mycallfunction { private ListView listView; private List<String> listtext; private String []data=new String[]{"澳门风云3","美人鱼","断头谷","师父","唐人街探索","我的特工爷爷"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView=(ListView)findViewById(R.id.listview); this.listtext=new ArrayList<>(); for(int i=0;i<data.length;i++) { this.listtext.add(data[i]); } MyBaseAdapter adapter=new MyBaseAdapter(this,listtext,this); listView.setAdapter(adapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { Toast.makeText(MainActivity.this,"第"+i+"被点击了",Toast.LENGTH_SHORT).show(); } }); } @Override public void click(View v) { Toast.makeText(this,listtext.get((Integer)v.getTag())+"正在下载中",Toast.LENGTH_SHORT).show(); }}
0 0
- Android ListView 中的按键点击事件的设置
- android按键事件和触屏事件(4)-listview的setOnItemClickListener点击无效的处理
- Android的ListView中的长按事件触发点击事件
- android listview添加headview,点击事件设置!
- android中的listView的点击事件失效处理
- Android:处理ListView条目中的Button的点击事件和条目点击事件冲突
- android listview系列之item的点击事件及item布局中的点击事件(四)
- Android中的ListView点击时的背景颜色设置
- Android中的ListView点击时的背景颜色设置
- ListView中的点击事件
- android listView设置了点击事件 点击无效
- ListView的Item中的按钮点击事件
- android listview 中的子控件(比如ImageView)设置点击事件
- Android中的文本框,图片以及点击事件的设置
- popupwindow中的listview设置点击事件没响应
- android listview中checkbox 的点击事件
- Android屏蔽ListView的Item点击事件
- android屏蔽listview 的item点击事件
- Android 4.4 Graphic系统详解(2) VSYNC的生成
- Map.containsKey方法——判断Map集合对象中是否包含指定的键名
- 职员有薪水了
- CodeForces 670B(模拟)水题
- Solr分面搜索(Faceting)
- Android ListView 中的按键点击事件的设置
- fragment中嵌套fragment出现页面叠加、错乱
- 面试题27:二叉搜索树按中序遍历原地转换为双向链表
- C# 微软源码
- LeetCode 349. Intersection of Two Arrays
- iPhone/iPad调整事件递交 endIgnoringInteractionEvents
- java 集合详解
- HashMap 和 HashTable 的区别
- CMTime详解-AVFoundation视频操作必备基础